【问题标题】:How to get django and jquery .ajax to play nice - not triggering success如何让 django 和 jquery .ajax 玩得很好——不触发成功
【发布时间】:2009-11-19 22:03:16
【问题描述】:

在这整个晚上,看不到我错过了什么:

JS:

$(document).ready(function() {

    $("#form").submit(function () {

        var txt = $('textarea[name=text]').val();  

        $.ajax({  
          type: "POST",  
          url: "/parse_text/",
          data: {"text": txt},  
          dataType: "text",
          success: function(h) {  
            alert('ok');
          },
          error: function() {  
            alert('failed');
          }  
        }); 

    });
});

还有 django 代码:

def parse_text(request):


    return HttpResponse("hello", mimetype="text'/plain")

我无法让它触发成功方法。使用 firebug 我可以看到 django 返回“hello”,状态为 200。

我也尝试更改为 json(虽然我真正想要的是返回一个 html 表)。

在js中:

dataType: "json",

在视图中:

return HttpResponse('[{"hello": "hello"}]', mimetype="application'/json")

现在返回 [{"hello": "hello"}] 和 200 状态。

我到底做错了什么!?

最终工作代码:

$(document).ready(function() {

    $("#form").submit(function () {

        var txt = $('textarea[name=text]').val();  

        $.ajax({  
          type: "POST",  
          url: "/parse_text/",
          data: {text : txt},
          success: function(html) {  
            $("#actions").html(html);
          },
          error: function() {  
            alert("fail");
          }  
        }); 
        return false;
    });
});

在视图中:

def parse_text(request):

    html = ''
    text = request.POST['text']

    ... generated some html based on the text ...


    return HttpResponse(html)

【问题讨论】:

  • 您是否安装了 Firefox 和 FireBug(如果没有,请同时安装)?打开 FireBug,转到 Console 或 Net 面板,提交您的表单并查看提交的内容和返回的内容。另外,在开发服务器中运行你的 django 应用程序,看看请求是否进入了正确的视图。也许做这些事情会给你一个提示。也就是说,我真的看不出你在这里做错了什么......

标签: jquery ajax django


【解决方案1】:

您的 jQuery 函数不会阻止表单提交的发生。因此,由于 Ajax 是异步的,因此提交发生在 Ajax 请求返回数据之前,函数永远不会看到它。

要解决此问题,请确保 return false; 位于 submit 函数的末尾 - 即倒数第二个 }) 之前。

【讨论】:

    【解决方案2】:

    您的两个 mimetype 示例都包含一个额外的撇号:mimetype="text'/plain"。代码真的是这样吗?

    【讨论】:

    • 修复了这个问题,但仍然遇到同样的问题。如果我没有输入 mimetype 和数据类型,也会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2014-03-18
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多