2014-01-05 206 views
0

我已经精疲力尽了我的大脑,试图让一些简单的工作。我想用django将表单从后重新加载到ajax的行为。我只是无法让它工作。从django返回ajax响应

的形式是这样的:

<form id="form1" action="/myurl/" method="post" onsubmit="doexchange"> 
<input id="input1" type="hidden" name="serializedData" value=""/> 
<button id="button1" type="submit">render<button/> 
</form> 

使用jQuery,我有这样的:

function doexchange(){ 
var dataBuffer = new Object(); 
dataBuffer = myCollecter(dataBuffer); 

$("#input1").attr("value", JSON.stringify(dataBuffer)); 

$.get($("#form1").attr("action"), 
     {serializedData: $("#input1").attr("value")}, 
     function(data){ 
     alert('yes' + data); 
     }); 

return false; 
} 

现在返回假是为了防止原来的形式从做它自己的POST。

在服务器端,我有很简单的东西,如:

def handler(request, data): 
    return HttpResponse('{}', 'application/json') 

客户顺利通过Ajax请求将数据发送到服务器。服务器还将{}空括号返回给客户端。但不是回调函数被调用,看到和警报,而是整个页面重新加载,我只在新页面上看到{}。

正如我所说我已经尝试了很多不同的东西,但我认为我错过了一些大象......任何想法?哦,我使用最新的Mozilla Firefox,但我不认为这是一个浏览器的具体问题...

回答

0

尝试绑定到窗体提交在您的JavaScript。

$('#form1').bind('submit', function(e){ 
    e.preventDefault(); 
    var form=$(this), 
    input=form.find('input[name="serializedData"]'); 
    $.ajax({ 
    // 
    }); 
1

我不认为一个解决方案需要非常复杂才能实现您的目标。考虑上线的东西:

<a class="btn" onclick="doexchange">render</a> 

的JavaScript代码如下所示:

function doexchange(){ 
    var dataBuffer = myCollecter(dataBuffer); 

    $.get('/myurl/', {serializedData: JSON.stringify(dataBuffer)}, function(data) { 
     alert('yes' + data); 
    }); 
} 

,看起来像一个页面