有人可以向我解释为什么我遇到这个代码块的竞争条件:
$("#someid").load( "home.php", callback_function );
function callback_function()
{
//some jQuery.get() goes here
}
而不是这段代码:
$("#someid").load( "home.php", function(){ callback_function(); } );
function callback_function()
{
//some jQuery.get() goes here
}
第一个代码块中的竞争条件是callback_function()中的处理在加载完成后不会执行,但似乎异步运行并且会搞砸一些UI的东西(这个UI的东西依赖于jQuery。 get()返回)。我是jQuery / JavaScript的新手,想知道为什么我需要显式的“function(){callback_function();}”。谢谢!
答案 0 :(得分:0)
更新
看起来你的问题是关于使调用异步与同步。我通常会重构我的代码,如果我需要ajax调用异步,但你应该能够通过使用基本的jQuery ajax解决这个问题。
$.ajax({
// will not work for jsonp or cross domain requests, will force success to run before
// other code
async: false,
url: "load.php",
dataType: "html",
success: function(response) {
$("#some_id").html(response);
}
});
看起来你的回调函数在被使用之前没有被声明为函数。
试一试:
$("#someid").load( "home.php", callback_function );
function callback_function()
{
//some jQuery.get() goes here
}
我建议使用JSLint(JSLint.com),因为它会检查您的语法并查找这些错误。
答案 1 :(得分:0)
结帐send a jquery callback function inside a variable
声明像
这样的函数function callback_function(){
//some jQuery.get() goes here
}
或
var callback_function = function(){
//some jQuery.get() goes here
}
然后尝试这个
$("#someid").load( "home.php",null, callback_function );
将callback参数作为第三个参数传递,以避免混淆jquery加载API(抱歉没有得到确切的单词:)。
答案 2 :(得分:0)
Javascript或任何脚本语言通过词法执行代码来工作。我的意思是它没有主要的排序方法。
因此,在第一个代码片段中,正在调用load函数并为其分配尚未声明的函数。在第二个代码片段中,函数内联到方法加载,因此它不会失败。
如果您首先定义该功能然后调用load,那么您的第一个代码段也可以正常工作。
function callback_function(){
}
$("#someid).load("home.php", callback_function);