看来我的脚本不想等待$ .post调用完成。这是一个问题。这是一些伪代码:
<script type="text/javascript" language="javascript">
$(document).ready(function(){
// Global var, to be used everywhere in the ready scope
// Note its default value!
var test = false;
$.post('test.php',{},function(result){
if(result=='yes')
{
// This gets executed!
alert('Its true! Hurraaay!');
test = true;
}
else
{
test = false;
}
}
if(test==false)
{
// THIS gets executed, despite the fact that we set test to true!
alert('Awww....');
}
// it reaches this, showing us that there was no error!
alert('Im alive!!!');
// and a whoooole bunch of other code here...
}
</script>
在没有挂起浏览器的情况下,在继续之前确保我的Post通话完成的最佳方法是什么?希望有一些不太乱的东西。 :)
答案 0 :(得分:4)
没有太麻烦正在使用回调。
只需在.post()
调用之外创建一些函数,并在您认为合适时在.post()
内调用它。您可以以非常灵活的方式进行多次回调并在AJAX调用中使用它们。
在您的情况下,由于您只拨打alert()
,因此无需创建其他功能 - 只需在alert()
电话内拨打.post()
即可。如果您的代码变大,请考虑创建单独的函数。
这是JavaScript和异步调用的工作方式。习惯它,并使用它的力量编写非常干净和可维护的代码。
答案 1 :(得分:2)
<script type="text/javascript" language="javascript">
$(document).ready(function(){
// Global var, to be used everywhere in the ready scope
// Note its default value!
var test = false;
$.post('test.php',{},function(result){
if(result=='yes')
{
// This gets executed!
alert('Its true! Hurraaay!');
test = true;
// it reaches this, showing us that there was no error!
alert('Im alive!!!');
// and a whoooole bunch of other code here...
}
else
{
test = false;
// THIS gets executed, despite the fact that we set test to true!
alert('Awww....');
}
}
}
</script>
答案 2 :(得分:0)
答案 3 :(得分:0)
太乱了?如果你缩进多个空格,一切都更具可读性,仍然可以正常工作。
var test = false; // NOW it's global
// Just so we can use the method again
function postSomething() {
$.post('test.php', {}, function(result) {
if(result === 'yes') {
alert('Its true! Hurraaay!');
test = true;
alert('Im alive!!!');
} else {
test = false;
alert('Awww....');
}
});
}
$(document).ready(function() {
postSomething();
});
虽然很可怕。
答案 4 :(得分:0)
JQuery .post()方法异步连接到您的服务器脚本。您可以使用回调功能,以便程序在从脚本返回响应后使用数据。
在调用post后,不要尝试同步处理数据,而是在收到响应时处理数据。利用函数使代码更具可读性。
$(function() {
postTest();
});
function postTest() {
$.post(
'test.php',
{},
function(response) {
if(response == 'yes') {
testSuccess();
} else {
testFailure();
}
}
);
}
function testSuccess() {
alert("Success");
}
function testFailure() {
alert("Failure");
}