簡體   English   中英

將參數傳遞給json_callback函數

[英]Passing parameter to json_callback function

我正在使用來自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()函數之間的中間動態創建該函數,使其成為一種人,從而允許您將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是某種短標識符,則可以,如果它來自用戶輸入,那么它實際上不適合在函數名稱中使用。 您正在使用name屬性,因此我認為這很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM