我使用ajax进行删除,然后使用Jquery触发表单提交,如代码中所示。
$.post("<?php echo site_url()?>/welcome/delete", {
acc:dlt},function(response){
alert(response);
});
$( "#myForm" ).submit();
问题是尽管ajax成功,但alert(response)
不会弹出。但如果我删除$( "#myForm" ).submit();
行,则会弹出警报并正常工作。
请告诉我如何使此响应功能正常工作,然后.submit()
功能。
非常感谢你。如果我的提问方式有点令人困惑,请原谅我,我是Stack Overflow的新手。
答案 0 :(得分:1)
你的问题并不令人困惑,但你想要做的是一点点。
当您提交表单时,您基本上是离开页面,因此浏览器会忽略ajax响应。
您可以等到ajax调用返回后再提交表单:
$.post("<?php echo site_url()?>/welcome/delete", { acc: dlt }, function(response) {
alert(response);
$("#myForm").submit();
});
答案 1 :(得分:1)
当你有这个代码时:
$.post("<?php echo site_url()?>/welcome/delete", {
acc:dlt},function(response){
alert(response);
});
$( "#myForm" ).submit();
当您收到AJAX请求的响应时,您正在做的是指定一个稍后执行的回调函数。在等待响应时,代码继续执行。所以事件的顺序是:
$.post(...)
请求已发送。$( "#myForm" ).submit();
。此时,您提交表单并离开页面。alert(response);
中的代码。有关问题的可能解决方案,请参阅John的回答。但是,如果这不能解决您的问题,您需要澄清为什么您希望表单提交独立于AJAX回调。
答案 2 :(得分:0)
感谢@John S和@ user3250365的回答,我实际上现在明白,Ajax后面的表单提交有时会导致问题,就像我的情况一样,表单先提交而不等待Ajax响应。所以作为一个解决方案,我刚刚摆脱了Ajax调用,而不是我通过Ajax发送的数组,现在我将它存储在我的表单中的一个隐藏字段中,并通过表单提交发送。
这是我的领域(隐藏):
<input id = "dlts" name = "dlts" type = "hidden"></input>
以下是我将数组(名为dlt)存储在字段中的方法:
var arrayString = JSON.stringify( dlt );
$('#dlts').val( arrayString );
这就是我在我的控制器中访问它的方法(使用php MVC,codeigniter)
$dlts = json_decode($this->input->post('dlts'), true);