我已经在JS编写了一段时间,但不知怎的,我总是得到一些“刮头”类型的问题。我认为我需要做一些挖掘,但同时有人可以帮助这个吗?
所以这就是问题: 我正在通过项目(由$(this)得到)进入回调函数。这段代码不起作用 - 当我真的认为它应该。既然我已将$(this)放入变量(克隆数据?)然后通过函数将其传递给回调,那么它肯定不会丢失数据吗?但确实如此,而且可怕。
// Allow hrefs with the class 'ajax' and a rel attribute set with a selector to load via ajax into that selector.
$(".ajax").unbind("click").click
(
function(e)
{
var locationhint = $(this).attr("rel");
var $location = $(locationhint);
$location.html ("<img src='images/blockloading.gif' />");
$location.load($(this).attr("href").replace("index.php", "ajax.php"), '', function($location){dready($location);});
e.preventDefault();
}
);
现在无效。
这个有效:
$(".ajax").unbind("click").click
(
function(e)
{
$("#myspecificdiv").load($(this).attr("href").replace("index.php", "ajax.php"), '', function(){dready($("#myspecificdiv"));});
e.preventDefault();
}
);
我认为它是一个范围问题,但我也做了这个,应该工作,因为它与上面的'静态'完全相同,基本上,因为它传递了文本ID元素。 这个也破了:。
$(".ajax").unbind("click").click
(
function(e)
{
var locationhint = $(this).attr("rel");
var $location = $(locationhint);
$location.html ("<img src='images/blockloading.gif' />");
var locationid = "#" + $location.attr("id");
$location.load($(this).attr("href").replace("index.php", "ajax.php"), '', function(locationid){dready($(locationid));});
e.preventDefault();
}
);
破解的,当我在console.log locationid时,返回目标DIV的内部HTML。 $ location.attr( “ID”);当没有其他地方没有调用它时,无法返回原始HTML吗?所以它是我的范围吗?但那么如何让内部HTML吐出来呢?
任何解决方案?
更新 在我发布这个12秒后,我发现函数($ location){dready($ location);}回调上的内部函数可以自动传递AJAX调用响应吗?但为什么?
答案 0 :(得分:1)
你不能这样做function($location){dready($location);}
但你不需要因为外部作用域定义了$ location,所以回调函数将理解这个var而不试图将它传递给回调函数,所以在这个实例中
function(){dready($location);}
会奏效。
调整范围问题的另一种方法是使用$.proxy。这允许您设置将在其下调用函数的此上下文。 jQuery.proxy( dready, $location )
返回一个可用作回调函数,该函数在调用时将调用方法dready并将此set设置为$ location。
e.g
$location.load($(this).attr("href").replace("index.php", "ajax.php"), '', jQuery.proxy( dready, $location );});