2009-12-29 5 views
5

J'ai beaucoup de données JSON je dois passer à une requête:requêtes AJAX POST avec JQuery n'UrlEncode « + »

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

friendsArr est un tableau d'objets au format JSON. Le problème est que certains objets ont des données avec un "+" et que cela n'est pas encodé correctement. Il vient du côté serveur comme un "" et les données sont foiré. Dois-je vraiment parcourir toutes les données et encoder chaque valeur séparément? Il doit y avoir un moyen plus facile.

+0

'friendsArr' exactement? – Harmen

+0

un tableau d'objets JSON – Tony

Répondre

4

Je l'essayer en utilisant la méthode $.post par rapport à la première $.ajax un, et laisser jQuery gérer le travail pour vous:

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

En outre, puisque vous pouvez seulement POST via AJAX aux adresses sur le même domaine, pourquoi ne pas simplement utiliser "https://stackoverflow.com/users/rankings" comme URL par rapport à "http://"+HOST+"https://stackoverflow.com/users/rankings"

+0

le poste n'a pas été nécessaire (mais pas une mauvaise idée) mais faire des amis: par opposition à "amis =" l'a fait. Je suppose que dit jquery pour échapper aux données et définir le type de contenu correctement ... grâce aussi de me rappeler pas besoin de domaine! – Tony

+0

+1 en utilisant l'objet des données est meilleure que la chaîne –

4

Vous devriez pouvoir utiliser la fonction javascript escape pour résoudre ce problème. Juste échapper vos données et URL avant de l'envoyer.

+0

non, j'ai essayé. – Tony

+0

@Tony ce qui se passe quand vous échappez aux données? Le '+ 'revient toujours en tant qu'espace, ou il revient comme autre chose? Vous devrez probablement le décoder dans votre code serveur. –

+0

correcte, vient en tant « ». Je suis en fait en utilisant des rails il doit décoder automatiquement ... ou bien je pense que je recevrais des erreurs folles – Tony

1

est-il pas aussi facile que:

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

ne fonctionne pas, je pense qu'il bousille l'objet – Tony