2014-04-25 106 views
3

这里是我的js说用了jQuery blockUI插件:ajax请求不能在Django中工作?

$(document).ajaxStop($.unblockUI); 

$('#submit-id-submit').click(function() { 
    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
}); 

我的观点:

def test_ajax(request): 
    time.sleep(20) 
    print "in test_ajax" 
    return HttpResponse("hell world") 

url(r"search/test/$", test_ajax,name="dummy"), 

首先,我看到了Ajax调用返回错误(因为我从错误警报,但它不显示错误信息)

其次,我的视图test_ajax没有被调用,因为我期望那里的print语句被执行,但它不会执行。

我无法弄清楚这里出了什么问题。

+0

你能到位在Chrome的开发工具中提醒您的警报中的断点,检查错误并发布它? – Fiver

回答

4

我以前也有类似的问题。原因是你允许默认的表单提交。试试这个,看看你得到了什么;

$('#submit-id-submit').click(function(e) { 
    e.preventDefault(); 
    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
}); 

或者干脆return false

$('#submit-id-submit').click(function() { 

    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
    return false; 
}); 

通过这样做既如此,可以防止默认动作(在你的情况表单提交我猜) 你可以阅读更多有关此here;

+1

谢谢......它帮助 –

1

您的错误功能正试图提醒error变量不存在。尝试提醒data变量。

此外,为了帮助解决问题,您可以检查视图函数与非AJAX GET请求一起使用。

最后,这不适用于您的情况,因为您使用GET请求,但如果您需要执行AJAX发布请求,则需要在标头https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#ajax中发送CSRF令牌。