0
votes

Avoir du mal à transformer mon objet javascript en une chaîne de paramètres

J'ai un objet avec la structure de données suivante ci-dessous. J'essaie de transformer cet objet en une chaîne de paramètre en procédant ci-dessous ci-dessous.

Lorsque mon extrait de code est exécuté dans le débogueur, je ne vois pas une erreur dans la console, mais cela soumet le formulaire prématurément pour une raison quelconque et dans L'URL que je peux voir mes paramètres affichés et arrête le reste de mon script. L'objet, les clés ne ressemblent pas à droite et produisent le numéro suivant contre le débogueur. P> xxx pré>

Quelle est la meilleure façon de prendre l'objet ci-dessous et de la transformer en une chaîne de paramètres vers Envoyer via ajax? P>

Je m'attends à renvoyer une chaîne de paramètres comme l'IP suivante = 111.111.111.111 & hostname = rr.com & city = myCity et ainsi de suite. p>

ci-dessous est mon objet IPInfo P>

    var myKeys = Object.keys(ipinfo);
        var queryString = "";
        for (var i = 0; i < myKeys.length; i++) {
            var theKey = ipinfo[i];
            if (queryString !== "") queryString += "&";
            queryString += theKey + "=" + JSON.Stringify(ipinfo[theKey]);
        }


0 commentaires

4 Réponses :


3
votes

Il semble que vous ayez besoin de json.parse () code> votre objet en premier. Aussi, vous pouvez essayer:

Object.entries(JSON.parse(ipinfo)).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&')


3 commentaires

Assurez-vous d'encoder l'URL avant de l'utiliser en tant que requérant.


Thx, j'ai oublié :)


Cela a fonctionné bien. Cela a vraiment nettoyé mon code aussi. Merci pour votre réponse.



2
votes

Eh bien d'abord, json.stringify ("une chaîne") code> renvoie "\" une chaîne \ "" code>, vous ne pouvez donc pas annuler cela dans l'URL. Je recommande de laisser la valeur native à la conversion de chaîne faire le travail. Au lieu de cela, vous devez bien utiliser l'URL d'encoder chaque valeur: xxx pré> p> second, vous avez probablement votre objet sous forme de chaîne, par exemple. "{\" bla \ ": 1234}" code> et donc objet.keys code> retourne 0 code> pour "{" code> , 1 code> pour "\" " code> et ainsi de suite - pour chaque index de chaîne, un numéro. Pour l'obtenir comme objet, vous devez l'analyser: P>

 const myObj = JSON.parse(myObj);


2 commentaires

Merci d'avoir pris le temps d'expliquer cela en détail. Très appréciée!


@Joez heureux d'aider. Je devrais également mentionner: N'utilisez pas objet.keys pour obtenir des indices de tableau / de chaîne. Cela les retourne, mais ce n'est pas une façon correcte de le faire.



0
votes

J'ai créé une méthode pour le faire, qu'il accepte un paramètre de chaîne de la manière dont le querystring était avant les modifications afin de pouvoir fusionner l'objet Params avec les éléments existants.

Dans votre cas, vous feriez: xxx pré>

et obtiendrait: p>

" http://some.site.com?ip = 111.111.111.111 & HostName = rr.com & city = myCity " p> BlockQuote>

La méthode avec certains commentaires DOC à l'intérieur: P>

attachURLParams = function (str, paramsObj, overWriteBool=true) {
    /* function adds parameters from json paramsObj to url string
    will work even if param already exists in the string.
    Overwrites existing params by default
    USE: var params = {var1:"value1", var2:"value2"}
    someURL = "http://www.test.com";
    someURL = attachURLParams(someURL, params);
    returns: http://www.test.com?var1=value1&var2=value2*/
    let ind = str.indexOf('?');
    const buildString = (mainPart, paramsObject) => {
        var attached = "?";
        for (var key in paramsObject) {
            attached += key + "=" + paramsObject[key] + "&";
        }
        // remove last "&" and return
        return String(mainPart + attached).slice(0, -1);
    }
    if (ind > -1) {
        var param_array = str.substring(ind + 1).split('&');
        var oldParamsObj = {},
        theLength = param_array.length;
        // keep all existing params in params object
        for (var i = 0; i < theLength; i++) {
            var x = param_array[i].toString().split('=');
            oldParamsObj[x[0]] = x[1];
        }
        // add new params to oldObj
        for (var key in paramsObj) {
            // skip if already there or not
            if (oldParamsObj[key] && !overWriteBool)
                continue;
            oldParamsObj[key] = paramsObj[key];
        }
        // build the string from scratch
        return buildString(str.slice(0, ind), oldParamsObj);
    } else {
        // no params in string, just add all mine
        return buildString(str, paramsObj);
    }
}


0 commentaires

0
votes

Utilisez la propriété de données sur la demande Ajax si vous utilisez jQuery.

    $.ajax({
      url: "http://www.mywebsite.com/endpoint",
      method: "GET",
      data: { "MyFirstParameter" : someVariable, "MySecondParameter" : someOtherVariable},
      success: function(data){
        console.log("Success");
        console.log(data);
      },
      error: function(error){
        console.log("ERROR");
        console.log(error);
      }
    });


0 commentaires