2009-12-29 3 views
5

У меня есть много данных JSON Мне нужно передать на запрос:AJAX POST запросов с JQuery не UrlEncode «+»

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

friendsArr является массивом объектов в формате JSON. Проблема в том, что некоторые объекты имеют данные с символом «+» и не получают правильную кодировку. Он поставляется на стороне сервера как «», и данные перепутаны. Нужно ли мне перебирать все данные и кодировать каждое значение отдельно? Должен быть более простой способ.

+0

Что такое 'friendsArr' точно? – Harmen

+0

массив объектов JSON – Tony

ответ

4

Я хотел бы попробовать его с помощью $.post метод против сырого $.ajax один, и пусть JQuery обрабатывать для вас работу:

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

Кроме того, поскольку вы можете только POST через AJAX по адресам в этом домене, почему бы не использовать только "https://stackoverflow.com/users/rankings" в качестве вашего URL-адреса против "http://"+HOST+"https://stackoverflow.com/users/rankings"

+0

сообщение не было (хотя и неплохая идея) но делать друзей: в отличие от «friends =» сделал это. я думаю, что говорит jquery, чтобы избежать данных и правильно установить тип контента ... также спасибо, что напомнили мне о необходимости использования домена! – Tony

+0

+1 использование объекта для данных лучше, чем строка –

4

Чтобы устранить эту проблему, вы должны использовать функцию javascript escape. Просто удалите свои данные и URL-адреса, прежде чем отправлять их.

+0

нет, я попробовал это. – Tony

+0

@ Тони, что происходит, когда вы избегаете данных? '+' Все еще возвращается как пространство, или он возвращается как что-то еще? Вероятно, вам придется декодировать его в коде serveride. –

+0

правильный, входит как "". я фактически использую рельсы, поэтому он должен автоматически декодироваться ... или иначе я думаю, что получаю какие-то сумасшедшие ошибки. – Tony

1

Разве это не так просто, как:

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

не работает, я думаю, что это испортило объект – Tony