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()