【问题标题】:jQuery $.POST only works when some function executed after it.jQuery $.POST 仅在其后执行某些函数时才有效。
【发布时间】:2011-07-30 00:05:32
【问题描述】:

我有这个几乎完成的 jQuery 项目,在用户数据成功验证的最后部分,它使用 $.post 函数执行外部 PHP 脚本,将用户输入的信息作为参数传递。

我的问题是,我的回调函数只有在我在它之后放置一个警报函数时才有效。

作品:

$.post("backend.php", dataString, 
    function(response) {
        if (response=="1") {
            alert("ok"); 
        }
    }, 'html'); 

alert('test');

但是,如果我没有在结束标记之后放置警报,我的脚本不会发出警报“ok”,或者回调中的任何其他内容。

你们有没有看到我的代码出了什么问题?

谢谢!

【问题讨论】:

  • 这个运气好吗?我有同样的问题。谢谢!
  • @AdamStorr 对不起,这个项目很久以前就完成了,我最终重写了神奇地修复它的代码:/。

标签: jquery ajax post callback get


【解决方案1】:

我的猜测是$.post() 脚本之后的某些内容会导致页面更改或导致帖子停止或失败。

基本上,alert('test') 所做的只是阻止您的代码等待按下 OK 按钮。使您的代码突然工作的唯一方法是,在第二次警报搞砸帖子之后,您的代码中是否执行了某些操作。

记住帖子是异步的。它会在您运行的任何其他代码时在后台发生,并且只有当它成功时,alert('ok') 才会运行。

所以,我的猜测是您页面中的其他内容正在运行并弄乱了帖子。

【讨论】:

  • 有点晚了,但这是任何人都可以解决问题的最接近的建议,所以接受并感谢!
【解决方案2】:

所以我在这里聚会迟到了,但我在这里遇到了似乎完全相同的问题,最终找到了解决方案。就我而言,我有一个表单提交按钮,我也试图将其用作 JQuery POST 调用的触发器。问题是提交表单时,它显然取消了 JQuery POST 调用。

在我的例子中,解决方案是将提交按钮更改为普通按钮,然后在与 POST 调用相同的 JQuery 函数中执行表单提交 -- POST 调用之后.我还需要对表单提交的调用引入一点延迟。所以,它看起来像这样:

$("#saveStuff").click(function () {  //my save button, no longer a submit
        $.post('UpdateStatusFlag', {}, function (data) {
              //some irrelevant stuff here
            }
        });
        setTimeout("$('#MyForm').submit()", 100); //needed the small delay to allow the post call to complete
});

希望这可以帮助一些人犯我曾经犯过的同样错误。

【讨论】:

    【解决方案3】:

    对于年轻球员(比如我自己)来说,这是一个非常微妙的陷阱。我在做同样的事情,在表单的提交事件上发布。当然,form 提交和 post 是同时发帖的,所以当 post 的响应回来时,form 已经刷新并自行重置。混乱盛行。

    在我的例子中,我并不真的希望表单实际提交,所以在我的提交函数中添加return false; 作为最后的语句可以很好地解决它。

    例如:

    $('#myForm').submit(function() {
        $.post('myurl',{some params});
        return false;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多