0

我正在尝试使用 jQuery 和 Python 发送字典。问题是如果我使用 async: false 它可以工作,但我的目标是使用 async: true 发送数据。此外,当我发送数据时,我在“完整”函数中的 alert() 会显示两次。我该如何解决这两个问题?

我附上 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')

感谢您的帮助。

4

1 回答 1

0

我运行您的代码,看起来 POST 本身确实到达了服务器。

不管怎样,你说你得到了两个“鳍”警报,但实际上你应该得到四个。

首先,您在循环中丢失了一个,因为您从 1 开始计数。因此,将 for 循环更改为从 0 开始。

不过,我们需要找到另一个。可能是您在运行 ajax 调用后立即刷新或重定向页面?如果你这样做了,它可以解释为什么它没有完成所有的 POST。

一个简单的解决方案可能是计算“fin”并仅在计算完所有 arrObj.length 后刷新/重定向。这也是显示“鳍”警报的更好时机。

一个更好的解决方案是重写您的服务器端,以便它接受您的整个字典数组,然后您可以像这样发送它:

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

然后,在服务器端,解析 JSON 并对其进行迭代。那会更好,更有效率。

于 2013-10-25T21:08:53.910 回答