我正在使用mapquest中的反向地理定位方法,看起来像这样
function fieldVia_changed(a)
{
if (document.getElementsByName("via"+a)[0].value.trim().length!=0)
{
var via = document.getElementsByName("via"+a)[0].value ;
var strV = via.replace(/ |,/g, "+");
var s = document.createElement('script');
s.src = 'http://open.mapquestapi.com/nominatim/v1/search?q='+strV+'&json_callback=cbv&format=json&polygon=1&addressdetails=1';
document.getElementsByTagName('head')[0].appendChild(s);
}
}
请求的结果在函数cbv中处理,该函数接受参数
function cbv(json)
{
v_lat[0] = json[0].lat;
v_lng[0] = json[0].lon;
}
但是我需要能够从fieldVia_changed函数将另一个参数传递给cbv函数,以便我可以正确处理信息。 cbv函数定义看起来像这个函数cbv(json,a)。我看了一遍,但我找不到解决方案。有可能吗?
答案 0 :(得分:1)
服务器端通常不会选择在JSONP系统中传递其他参数。一种可能的解决方案是在回调函数名称中使用a
的值,并在cbv()
函数之间的中间动态创建函数,允许您传递a
作为第二个论点。
function fieldVia_changed(a) {
if (document.getElementsByName("via" + a)[0].value.trim().length != 0) {
// dynamically create the function
window['cbv_' + a] = function (json) {
cbv(json, a);
};
var via = document.getElementsByName("via" + a)[0].value;
var strV = via.replace(/ |,/g, "+");
var s = document.createElement('script');
// call the function cbv_x
s.src = 'http://open.mapquestapi.com/nominatim/v1/search?q=' + strV + '&json_callback=cbv_' + a + '&format=json&polygon=1&addressdetails=1';
document.getElementsByTagName('head')[0].appendChild(s);
}
}
function cbv(json, a) {
v_lat[0] = json[0].lat;
v_lng[0] = json[0].lon;
console.log(a);
}
如果a
是某种短标识符,这是可以的,如果它来自用户输入,那么它不适合在函数名中使用。你在名字属性中使用,所以我认为这很好。