2

每当我执行 jquery $.post() 时,我都会获得“已取消”状态。这似乎是一个异步问题?我访问本地项目http://127.0.0.1:8933/myproject/default/index.html

索引.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>

实用程序.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 数据传递给服务器上的处理函数。但是,我会看到警报消息“失败!” 即使数据已经处理,每次都会弹出。在 chromium 的调试面板中,我在“网络”选项卡下看到帖子的状态为“ (已取消) ”,整行将以红色突出显示。所述类型为“待定”。

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

4

2 回答 2

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 请求。

于 2013-05-08T15:49:18.800 回答
0

你可以试试这个...

$('#mybutton').live("click", function(e) {  
    e.preventDefault();
    var post_url = get_url();
    var data = ...;
    do_action(post_url, data); 
});

根据您使用的 jQuery 版本,您可以使用jQuery.live()orjQuery.on()方法

调用该方法时e.preventDefault(),如果调用该方法,则不会触发该事件的默认动作。

资源:

于 2013-05-08T16:00:01.923 回答