pej*_*ohn 3 javascript ruby-on-rails-3
我在javascript中发出HTTP POST/DELETE请求以删除我的rails应用中的消息
$.post(message_url, { _method: 'delete' }, null, "script");
Run Code Online (Sandbox Code Playgroud)
如果我在执行此行后在页面上刷新浏览器,则会看到该消息实际上已被删除且不再显示.
现在我希望页面在此命令后自动刷新,以便用户看到它消失了.我有以下几行:
$.post(message_url, { _method: 'delete' }, null, "script");
window.location.reload();
Run Code Online (Sandbox Code Playgroud)
现在页面确实刷新了但消息不再被删除.我在控制台中没有看到任何错误.
所以基本上没有这个reload(); 命令消息删除就好了,但是如果我添加这个reload()行就会停止工作.为什么会这样?
更重要的是,我怎么能完成我想要做的事情?
"问题" $.post是异步的.这意味着当你调用它时,它会向服务器发出一个AJAX请求(删除该消息).由于它是异步的,因此Javascript继续运行(它不会等待AJAX请求完成以继续运行其余的代码(window.location.reload()).由于它不等待,因此window.location.reload()在请求被触发后立即运行并且可能已中止(因为浏览器被重定向到新页面,这是默认行为).
解决方案是执行reload()完成$.post调用:
$.post(message_url, { _method: 'delete' }, function () {
window.location.reload();
}, "script");
Run Code Online (Sandbox Code Playgroud)
http://api.jquery.com/jQuery.post/