我有一个几乎完成的jQuery项目,对于用户数据成功验证的最后部分,它使用$ .post函数执行外部PHP脚本,传递用户输入信息的参数。
我的问题是,我的回调函数只有在我之后放置一个警报功能时才有效。
作品:
$.post("backend.php", dataString,
function(response) {
if (response=="1") {
alert("ok");
}
}, 'html');
alert('test');
但是如果我在结束标记之后没有发出警告,我的脚本就不会在回调中发出警告“ok”或其他任何内容。
你们有没有看到我的代码出了什么问题?
谢谢!
答案 0 :(得分:2)
我的猜测是$.post()
脚本之后会出现导致页面更改或导致帖子停止或失败的内容。
从根本上说,alert('test')
所做的就是阻止你的代码等待按下OK按钮。使代码突然运行的唯一方法是,如果在第二次警报之后代码中有某些内容正在执行,那么该帖子就会搞乱。
请记住帖子是异步的。它会在后台发生,而你运行的任何其他代码都会在alert('ok')
运行时运行。
所以,我的猜测是你网页上的其他内容正在运行并弄乱帖子。
答案 1 :(得分:1)
所以我在这里参加派对的时间已经很晚了,但我在这里面临的问题似乎完全相同,并最终找到了解决方案。在我的情况下,我有一个表单提交按钮,我也试图用作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
});
希望这可以帮助一些人犯同样的错误。
答案 2 :(得分:1)
这里的年轻球员(比如我自己)非常微妙的陷阱。我做了完全相同的事情,发布在表单的提交事件上。当然,表单同时提交和发布帖子,所以当帖子的响应回来时,表单已刷新并重置自己。混乱占主导地位。
在我的情况下,我真的不希望表单实际提交,所以在我的提交函数中添加return false;
作为最终语句很好地排序了。
E.g:
$('#myForm').submit(function() {
$.post('myurl',{some params});
return false;
};