jQuery ajax停止数据urlencode
问题描述:
我正在编写一个web应用程序,并且必须从多个API中获取数据才能显示该用户。所以在第一步中,用户可以从第一个API中选择几个地方。在那里我得到了像1.2345,6.7890这样的坐标,并将它们保存到一个数组中。现在我想将它们传递给路由API,参数必须是http://example.com/route?location=1.2345,6.7890&location=2.3456,7.8901。jQuery 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不要编码我的数据字符串?
答
根据上面的注释,您必须手动编写输入字符串,因为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"
});
最糟糕的情况是,您可以手动构建查询字符串,而不是将对象传递给'data' – charlietfl 2014-11-23 23:56:04