2013-10-25 25 views
0

我想用jQuery和Python發送字典。問題是如果我使用async:false它可以工作,但我的目標是使用async:true發送數據。 另外,當我發送數據alert()時,我在「完成」函數中顯示了兩次。我該如何解決這兩個問題?如何用jQuery ajax和Python發送字典

我附上JavaScript代碼和Python代碼:

首先Javascript代碼:

arrObj = [['numero', 'dato', 'dato2'], ['12345', 'prueba', 'prueba2'], ['54321', 'abeurp', '2abeurp'], ['112233', 'trewq', 'fdsag']]; 
var n = arrObj.length; 

for(var i=1;i<n;i++){ 

    var jsonArr = {}; 
    jsonArr = {'numero': arrObj[i][0], 
     'dato': arrObj[i][1], 
     'dato2': arrObj[i][2] 
     }; 
    jsonArr = JSON.stringify(jsonArr); 

    $.ajax({ 
     data: jsonArr, 
     type: 'post', 
     url: '/getData', 
     async: true, 
     dataType: 'text', 
     error: function(output){ 
      console.log('error'); 
     }, 
     success: function(output){ 
      console.log('bien ' + i); 
     }, 
     complete: function(output){   
      alert("fin"); 
     } 
    }); 
} 

而Python腳本:

class getData(webapp.RequestHandler): 
    def post(self): 
     v1 = self.request.get('numero') 
     v2 = self.request.get('dato') 
     v3 = self.request.get('dato2') 

     logging.info('DEBUG: var1=' + v1 + ' var2=' + v2 + ' var3=' + v3) 

     self.response.out.write('good') 

謝謝您的幫助。

+0

爲什麼你需要同步提出請求?你是否證實你的服務器正在接收4個請求? Hvae是否通過您的JavaScript控制檯檢查了請求? – dm03514

+0

它是同步的,因爲它必須是這樣的。我自己解決了這個問題。它是來自jsonArr = {'numero':arrObj [i] [0] ...和stringify函數的代碼塊。我刪除它後,它工作。 – Victor

回答

0

我運行你的代碼,它看起來POST本身確實到達服務器。

無論如何,你說你得到兩個「fin」警報,但實際上你應該得到四個。

首先,在循環少了一個,因爲你開始從1計數因此改變for循環,從0

不過首先,我們需要找到另一個。您是否可以在運行ajax調用後立即刷新或重定向頁面?如果你這樣做,它可以解釋爲什麼它沒有完成所有的POST。

一個簡單的解決方案可能只是在計算完所有arrObj.length之後計算「fin」並刷新/重定向。這也是顯示「fin」警報的更好時機。

一個更好的解決方案是重寫你的服務器端,因此接受你的整個字典數組,然後你可以把它想:

$.ajax({ 
data: arrObj, 
... 

,然後,在服務器端,解析JSON和迭代超過它。 這會更好,更高效。

+0

謝謝你的回答。我在$ .ajax函數之前刪除了三行後發現了問題,並像這樣寫了字典:jsonArray ['numero'] = element。我解決的第二個問題也解決了。 – Victor