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

时间:2012-01-18 04:20:58

标签: javascript jquery

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

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

3 个答案:

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

请参阅load documentation

答案 2 :(得分:0)

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

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

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

function callback_function(){

}

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