2012-04-02 79 views
2

在.getJSON中傳遞數據時遇到問題。這是因爲我需要傳遞相同名稱的變量。所以,我有Python中的客戶端和我這樣做與代碼:.getJSON傳遞具有相同名稱的變量數據

query_args = { 'name':[var1,var2,var3] } 

output = urllib2.urlopen('http://'+servername+':'+port+'/'+action,urllib.urlencode(query_args,doseq=True)) 

,如果我嘗試這樣做,在.getJSON javasctipt,我試着做

$.getJSON(
    "http://servername::8001/SearchNode", 
    { 
     name: "name", 
     name: "google" 
    }, 
    function(data) { 

     $.each(data, function(key, val) { 
      console.log(key); 
      console.log(val); 
     }); 
    } 
); 

當調試查詢字符串我只看到其中一個變量。任何人都可以給我一個簡單的解決我的問題?

問候

+0

另一個不錯的問題。啊,驚喜,你剛達到upvote水平;-) – GhostCat 2017-12-06 15:40:27

回答

2

爲一個變量內通過多個對象,則必須使用其他結構。在你的情況下,你想要發送字符串名稱谷歌。通過使用你的方法,你可以簡單地覆蓋變量名的值。

有多種方法可以解決這個問題。我必須說,我已經有一段時間沒有使用python了(所以phytoneers在那裏,請隨時糾正我)。

想法1: 重命名js-code中的參數並將它們粘在一起在Python中。改變你的2個參數的一個關鍵,所以它們不會覆蓋...

$.getJSON(
    "http://servername::8001/SearchNode", 
    { 
     name1: "name", 
     name2: "google" 
    }, 
    function(data) {...} 
) 

...事後重建陣列...

query_args = {'name': [name1, name2] } 

或者不打擾與query_args,而是直接處理他們進入你的urllib.urlencode

output = urllib2.urlopen('yoururl', urllib.urlencode({'name':[name1, name2]}, True)) 

理念2: 這可能是你想要做的。將兩個字符串放入數組中並將其作爲參數發送。在json.org你可以看看通過ajax發送的不同種類的數據結構。 在這種情況下,你的代碼應該是這樣的:

$.getJSON(
    "http://servername::8001/SearchNode", 
    { 
     name: ["name", "google"] 
    }, 
    function(data) {...} 
) 

使用這種方法,你可以很容易地添加更多的參數,而不會增加你以後需要Concat的這麼多不同的變量。 因爲我不再熟悉python了,所以我不能告訴你python會如何存儲這個(可能是一個列表)。但無論哪種方式,您都應該能夠在urlencode函數中處理這個問題。 (至少documentation說,它必須是一個序列,這個列表肯定是)

相關問題