2009-11-19 33 views
0

在这一个晚上,不能看到什么,我缺少的:如何获得Django和jQuery的阿贾克斯发挥好 - 不触发成功

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") 

我不能得到它来触发成功的方法。使用萤火虫我可以看到,Django返回“你好”,状态200.

我也尝试改变为JSON(虽然我真正想要的是返回一个HTML表)。

在JS:

dataType: "json", 

鉴于:

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

现在返回[{ “你好”: “你好”}]和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) 
+0

您是否安装了Firefox&FireBug(如果没有,请同时获得)?打开FireBug,进入控制台或网络面板,提交表单,看看提交的内容和返回的内容。另外,在开发服务器上运行你的django应用程序,看看请求是否正确。也许做这些事情会给你一个提示。这就是说,我真的没有看到你在这里做错了什么...... –

回答

5

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

要解决这个问题,请确保您在submit函数的末尾有return false; - 即在第二个从})之前。

+0

谢谢你谢谢 - 现在一切正常! – PhoebeB

1

你MIME类型的实例都包含一个额外的撇号:mimetype="text'/plain"。代码真的是这样吗?

+0

修正了这个问题,但仍然遇到同样的问题。如果我不放置mimetype并且没有数据类型,也会发生。 – PhoebeB