将参数传递给json_callback函数

时间:2014-08-06 12:49:51

标签: javascript json jsonp

我正在使用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)。我看了一遍,但我找不到解决方案。有可能吗?

1 个答案:

答案 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是某种短标识符,这是可以的,如果它来自用户输入,那么它不适合在函数名中使用。你在名字属性中使用,所以我认为这很好。