每当我执行jquery $ .post()时,我都会收到“已取消”状态。这似乎是一个异步问题?我使用http://127.0.0.1:8933/myproject/default/index.html
的index.html:
<script>
$(document).ready(function() {
$('#mybutton').click(function() {
var post_url = get_url(); // resolves to "/myproject/default/process_func"
var data = ...;
do_action(post_url, data);
});
});
</script>
<a href="" id="mybutton"> Click me! </a>
util.js中:
function doPost(url, data) {
$.post(url, data).then(doSuccess, doFail):
function doSuccess(data) {
alert('Successful!');
}
function doFail(data) {
alert('Failed!');
}
}
function do_action(url, data) {
var jsondata = JSON.stringify(data);
// some other stuffs...
doPost(url, jsondata);
}
我们的想法是将一些数据发回服务器,以便使用json数据进行处理。用户将点击锚点按钮,do_action()
将会触发,然后它将在doPost()
中发布。
这似乎有效,因为我看到json数据传递给服务器上的处理函数。但是,我会看到警告消息“失败!”即使数据已被处理,每次都会弹出。在chrome的调试面板中,我在“网络”选项卡下看到帖子状态为“(已取消)”,整条线将以红色突出显示。声明的类型是“待定”。
我认为这是一个异步问题,但我不确定如何修复它。
答案 0 :(得分:7)
使用此方法取消<a>
的默认导航行为:
$('#mybutton').click(function(e) { // <-- Add `e` here
e.preventDefault(); // <-- Add this line
var post_url = get_url();
var data = ...;
do_action(post_url, data);
});
我认为AJAX请求正在被浏览器中止,因为当点击链接时,虽然请求被发送,但链接尝试导航到新页面,因此浏览器必须中止打开的AJAX请求。
答案 1 :(得分:0)
你可以试试这个......
$('#mybutton').live("click", function(e) {
e.preventDefault();
var post_url = get_url();
var data = ...;
do_action(post_url, data);
});
根据您使用的jQuery版本,您可以使用jQuery.live()
或jQuery.on()
方法
如果调用此方法调用e.preventDefault()
方法,则不会触发事件的默认操作。
资源: