【问题标题】:jQuery AJAX request gets called twice when using Jquery, Django and Google App Engine使用 Jquery、Django 和 Google App Engine 时,jQuery AJAX 请求被调用两次
【发布时间】:2011-04-11 03:52:45
【问题描述】:

我正在使用 Google App Engine、Jquery 和 Django。我希望在提交表单时将 POST 数据发送到服务器端,我在 JQuery 中使用以下代码执行此操作:

    $("#listform").submit(function() {
            $.ajax({
                    type: "POST",
                    url: "/xhrtest",
                    data: {'name': 'herman'},
                    success: function(data){
                            console.log(data)
                    }
            });
    })

在我的 Django 视图中:

def xhrtest(request):
        if request.method == "POST":
                return HttpResponse("Post data!")
        else:
                return HttpResponse("GET request.")

我本来希望收到“发布数据!”的回复,但不知何故,回复总是“GET 请求”。这也不是 unicode 问题,因为可以打印 request.method 并查看“GET”。

在 Firebug 中对此进行评估时,我看到两个请求正在通过:第一个是 POST 请求,它接收回复“GET 请求”。然后是一个 GET 请求,它接收到“Get request”的回复。也是。在 Google App Engine 开发控制台中,我还可以看到两个请求正在通过。 POST 请求得到 301 响应,GET 得到 200。

这是什么意思,我必须做什么才能接收 POST 数据?

【问题讨论】:

  • request.method(在您的 django 代码中)是否正确?如果是“post”,则不等于“POST”。
  • 某些服务器配置正在重定向您的 POST 请求,看起来像。 (w3.org/Protocols/rfc2616/rfc2616-sec10.html)

标签: jquery ajax django google-app-engine


【解决方案1】:

问题几乎可以肯定是您请求的 url /xhrtest,没有最后的斜线。默认情况下,Django 会将该请求重定向到 /xhrtest/ - 带有最后一个斜杠 - 并且该重定向将是 GET,而不是 POST。

有关详细信息,请参阅配置此行为的 APPEND_SLASH 设置和使用它的 CommonMiddleware 模块。

【讨论】:

  • 谢谢,解决了。我不知道 django 有这种默认行为。
【解决方案2】:

首先你需要“关闭”你的submit-button

        $("#listform").off('submit').submit(function() {
                $.ajax({
                        type: "POST",
                        url: "/xhrtest",
                        data: {'name': 'herman'},
                        success: function(data){
                                console.log(data)
                        }
                });
        })

它也适用于click

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多