2009-12-29 18 views
5

tengo una gran cantidad de datos JSON que necesito para pasar a una petición:peticiones AJAX post con jQuery no urlencode '+'

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

friendsArr es una matriz de objetos en formato JSON. El problema es que algunos objetos tienen datos con un "+" y que no se codifican correctamente. Viene en el lado del servidor como "" y los datos están en mal estado. ¿Debo realmente iterar a través de todos los datos y codificar cada valor por separado? Debe haber una manera más fácil.

+0

? 'friendsArr' exactamente? – Harmen

+0

una matriz de objetos JSON – Tony

Respuesta

4

me gustaría probarlo utilizando el método $.post frente a la cruda $.ajax uno, y dejar que jQuery manejar el trabajo por usted:

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

Además, dado que solo puede POST a través de AJAX a direcciones en el mismo dominio, ¿por qué no simplemente usa "https://stackoverflow.com/users/rankings" como su URL frente a "http://"+HOST+"https://stackoverflow.com/users/rankings"

+0

la publicación no era necesaria (aunque no es una mala idea) pero haciendo amigos: a diferencia de "friends =" lo hizo. Supongo que le dice a jquery que debe escapar de los datos y establecer el tipo de contenido correctamente ... ¡también gracias por recordarme que no necesito dominio! – Tony

+0

+1 usando el objeto para datos es mejor que la cadena –

4

Debería poder utilizar la función javascript escape para solucionar este problema. Solo escapa tus datos y URL antes de enviarlos.

+0

no, lo intenté. – Tony

+0

@Tony ¿Qué sucede cuando escapas de los datos? El '+' todavía regresa como un espacio, o vuelve como algo más? Probablemente deba decodificarlo en su código de servidor. –

+0

correcto, entra como "". en realidad estoy usando rieles así que debería decodificar automáticamente ... o si no creo que estaría obteniendo algunos errores locos – Tony

1

no es tan fácil como:

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

no funciona, creo que estropea el objeto – Tony

Cuestiones relacionadas