2009-12-29 5 views
5

ich eine Menge von JSON-Daten habe ich auf eine Anfrage weitergeben müssen:AJAX POST-Anfragen mit JQuery do urlencode nicht '+'

$.ajax({ 
       type: "POST", 
       url: "http://"+HOST+"https://stackoverflow.com/users/rankings", 
       data: "friends="+JSON.stringify(friendsArr), 
       success: function(response){ 
        $("#rankings").html(response); 
       } 
      }); 

friendsArr ist ein Array von Objekten im JSON-Format. Das Problem besteht darin, dass einige Objekte Daten mit einem "+" haben und diese nicht richtig codiert werden. Es kommt in Server-Seite als "" und die Daten sind durcheinander. Muss ich wirklich alle Daten durchlaufen und jeden Wert separat kodieren? Es muss einen leichteren Weg geben.

+0

Was ist 'FreundeArr' genau? – Harmen

+0

ein Array von JSON-Objekten – Tony

Antwort

4

Ich würde versuchen, es das $.post Verfahren gegen den rohen $.ajax ein verwenden, und lassen Sie jQuery die Arbeit für Sie erledigen:

$.post("http://"+HOST+"https://stackoverflow.com/users/rankings", 
    { friends: JSON.stringify(friendsArr) }, 
    function(data){ 
     $("#rankings").html(response); 
    } 
); 

Darüber hinaus, da Sie nur POST über AJAX zu Adressen auf der gleichen Domain können, warum nicht einfach "https://stackoverflow.com/users/rankings" als Ihre URL vs. "http://"+HOST+"https://stackoverflow.com/users/rankings"

+0

der Beitrag war nicht notwendig (obwohl keine schlechte Idee) aber Freunde machen: im Gegensatz zu "Freunden =" tat es. Ich schätze, dass jQuery den Daten entkommt und den Inhaltstyp richtig einstellt ... auch danke, dass du mich daran erinnert hast, dass keine Domäne benötigt wird! – Tony

+0

+1 mit dem Objekt für Daten ist besser als die Zeichenfolge –

4

Sie sollten in der Lage sein, die Javascript escape Funktion zu verwenden, um dieses Problem zu beheben. Entkomme einfach deine Daten und deine URL, bevor du sie abschickst.

+0

Nein, das habe ich ausprobiert. – Tony

+0

@Tony was passiert, wenn Sie die Daten entkommen lassen? Das '+' kommt immer noch als ein Raum zurück, oder es kommt als etwas anderes zurück? Sie müssen es wahrscheinlich in Ihrem serverseitigen Code dekodieren. –

+0

richtig, kommt als "". Ich verwende tatsächlich Schienen, so dass es automatisch decodiert werden sollte ... sonst denke ich, dass ich einige verrückte Fehler bekommen würde – Tony

1

Ist es nicht so einfach wie:

$.ajax({ 
    type: "POST", 
    url: "http://"+HOST+"https://stackoverflow.com/users/rankings", 
    data: "friends="+escape(JSON.stringify(friendsArr)), 
    success: function(response){ 
     $("#rankings").html(response); 
    } 
}); 
+0

funktioniert nicht, ich denke, es vermasselt das Objekt – Tony