jQuery.load()不能用定义的函数作为回调吗?

有人可以向我解释为什么我遇到这个代码块的竞争条件:

$("#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();}”。 谢谢!

check out 在变量中发送一个jquery回调函数

声明函数就好

 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(抱歉没有得到确切的单词:))。

看加载文档 ,

Javascript或任何脚本语言通过词法执行代码来工作。 我的意思是它没有主要的排序方法。

因此,在第一个代码片段中,正在调用load函数并为其分配尚未声明的函数。 在第二个代码片段中,函数内联到方法加载,因此它不会失败。

如果您首先定义函数然后调用load,那么您的第一个代码段也应该可以正常工作。

 function callback_function(){ } $("#someid).load("home.php", callback_function); 

UPDATE

看起来你的问题是关于使调用异步与同步。 我通常会重构我的代码,如果我需要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),因为它会检查您的语法并查找这些错误。