Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AJAX POST requests with JQuery don't urlencode '+'

I have a lot of JSON data I need to pass to a request:

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

friendsArr is an array of objects in JSON format. The issue is that some objects have data with a "+" and that does not get encoded properly. It comes in server side as a " " and the data is messed up. Do I really have to iterate through all the data and encode each value separately? There must be an easier way.

like image 440
Tony Avatar asked Dec 29 '09 16:12

Tony


2 Answers

I would try it using the $.post method vs. the raw $.ajax one, and let jQuery handle the work for you:

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

Additionally, since you can only POST via AJAX to addresses on the same domain, why not just use "/users/rankings" as your URL vs. "http://"+HOST+"/users/rankings"

like image 177
Doug Neiner Avatar answered Sep 23 '22 02:09

Doug Neiner


You should be able to use the javascript escape function to fix this problem. Just escape your data and URL before you send it off.

like image 41
TM. Avatar answered Sep 24 '22 02:09

TM.