Ajax成功函数在$(“#form_id”)之前不起作用.resent()

时间:2015-08-22 18:59:06

标签: javascript jquery html forms

我使用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的新手。

3 个答案:

答案 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请求的响应时,您正在做的是指定一个稍后执行的回调函数。在等待响应时,代码继续执行。所以事件的顺序是:

  1. $.post(...)请求已发送。
  2. $( "#myForm" ).submit();。此时,您提交表单并离开页面。
  3. 第1步中的请求会返回响应,但由于您已离开页面,因此不会执行回调函数alert(response);中的代码。
  4. 有关问题的可能解决方案,请参阅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);