传递参数给json_callback函数

Passing parameter to json_callback function

本文关键字:callback 函数 json 参数      更新时间:2023-09-26

我正在使用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)。我到处都找了,但就是找不到解决办法。

在JSONP系统中,服务器端通常没有传递额外参数的选项。一种可能的解决方案是在回调函数名称中使用a的值,并动态创建该函数作为cbv()函数之间的一种man,允许您将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是某种短标识符,这是OK的,如果它来自用户输入,那么它不适合在函数名中使用。你使用的是name属性所以我认为这没问题