load () Область вызова функции вызова API - PullRequest
0 голосов
/ 20 мая 2011

Я уже некоторое время кодирую в JS, но почему-то у меня всегда возникает проблема типа «царапины на голове».Я думаю, что мне нужно немного покопаться, но в то же время кто-то может помочь с этим?

Так вот в чем проблема: Я прохожу товар (получил $(это)) в функцию обратного вызова.Этот код не работает - когда я действительно думаю, что это должно.Поскольку я поместил $ (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();
    }
); 

Я так понимаю, это проблема объема, но я также сделал это, что должно работать, потому чтопо сути, он точно такой же, как и «статический», потому что он передает текстовый идентификатор элемента. Этот также ломает: .

$(".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 возвращает внутренний HTML-код целевого DIV.$ Location.attr ( "ID");не может вернуть необработанный HTML, когда его нет нигде?Так что это сфера, я так понимаю?Но тогда как заставить внутренний HTML выплевывать?

Какие-нибудь решения?

Обновление: 12 секунд после того, как я опубликовал это, мне пришло в голову, что функция ($ location) {dready ($ location);} внутренняя функция в обратном вызове может автоматически передавать вызов AJAXответ через?Но почему?

1 Ответ

1 голос
/ 20 мая 2011

Вы не можете сделать это function($location){dready($location);}, но вам это не нужно, поскольку внешняя область имеет $ location, определенную функцией обратного вызова, будет понимать эту переменную, не пытаясь передать ее в функцию обратного вызова, поэтому в этом случае

function(){dready($location);}

будет работать.

Другим способом решения проблем с областями видимости является использование $. Proxy .Это позволяет вам установить контекст this, в котором будет вызываться функция.jQuery.proxy( dready, $location ) возвращает функцию, которая может использоваться в качестве обратного вызова, которая при вызове будет вызывать метод уже с этим параметром в $ location.

например,

$location.load($(this).attr("href").replace("index.php", "ajax.php"), '', jQuery.proxy( dready, $location );});
...