【问题标题】:How to send a dictionary with jQuery ajax and Python如何使用 jQuery ajax 和 Python 发送字典
【发布时间】:2013-10-25 20:11:22
【问题描述】:

我正在尝试使用 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 个请求?您是否通过 javascript 控制台检查了请求?
  • 它是同步的,因为它必须是这样的。我自己解决了这个问题。这是来自 jsonArr = {'numero': arrObj[i][0]... 和 stringify 函数的代码块。在我删除它之后,它起作用了。

标签: javascript jquery python ajax google-app-engine


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 感谢您的回答。在删除 $.ajax 函数之前的三行并像这样编写字典后,我发现了问题: jsonArray['numero'] = element.我遇到的第二个问题我也解决了。
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多