jQuery ajax停止数据urlencode

问题描述:

我正在编写一个web应用程序,并且必须从多个API中获取数据才能显示该用户。所以在第一步中,用户可以从第一个API中选择几个地方。在那里我得到了像1.2345,6.7890这样的坐标,并将它们保存到一个数组中。现在我想将它们传递给路由API,参数必须是http://example.com/route?location=1.2345,6.7890&location=2.3456,7.8901jQuery ajax停止数据urlencode

问题是jQuery编码数据并将其切换到%2C。 Google-API接受这两个版本,但是我只能使用接受API。

myPlaces = ["1.2345,6.7890", "2.3456,7.8901"] 

$.ajax({ 
    url : "example.com", 
    datatype : "json", 
    jsonp : "jsonp", 
    data : { 
     loc : myPlaces 
    } 
}); 

如何告诉jQuery不要编码我的数据字符串?

+0

最糟糕的情况是,您可以手动构建查询字符串,而不是将对象传递给'data' – charlietfl 2014-11-23 23:56:04

根据上面的注释,您必须手动编写输入字符串,因为jQuery的参数序列化将始终自动对您的逗号进行URL编码。

幸运的是,这不应该是太头疼:

myPlaces = ["1.2345,6.7890", "2.3456,7.8901"]; 
 

 
//string composition function 
 

 
var placesString = myPlaces.reduce(function(str, current){ 
 
    return str + "loc=" + current; 
 
}, ""); 
 
    
 
//then use it in your ajax call 
 

 
$.ajax({ 
 
    url : "example.com", 
 
    datatype : "json", 
 
    jsonp : "jsonp", 
 
    data : placesString, 
 
});

是的,它似乎是在不同的浏览器(Firefox不编码而Chrome一样)不同了urlencoded 。尝试将坐标直接映射到url中:

myPlaces = ["1.2345,6.7890", "2.3456,7.8901"]; 

var myPlacesQueryString = ""; 
$.each(myPlaces, function(i, value) { 
    myPlacesQueryString += "location=" + value; 
    if (i < myPlaces.length - 1) { 
     myPlacesQueryString += "&"; 
    } 
}); 

$.ajax({ 
    url : "example.com/route?" + myPlacesQueryString, 
    datatype : "json", 
    jsonp : "jsonp" 
});