jquery $ .post()被取消

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

index.html的:

  $(document).ready(function() { $('#mybutton').click(function() { var post_url = get_url(); // resolves to "/myproject/default/process_func" var data = ...; do_action(post_url, data); }); });   Click me!  

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

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

使用此方法,取消的默认导航行为:

 $('#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请求。

你可以尝试这个……

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

资源:

  • event.preventDefault()
  • $ .live()