jquery $ .post()被取消了

时间:2013-05-08 15:46:47

标签: javascript jquery post

每当我执行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的调试面板中,我在“网络”选项卡下看到帖子状态为“(已取消)”,整条线将以红色突出显示。声明的类型是“待定”。

我认为这是一个异步问题,但我不确定如何修复它。

2 个答案:

答案 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()方法,则不会触发事件的默认操作。

资源: