AJAX / JQuery - var не существует - PullRequest
1 голос
/ 22 декабря 2011

У меня есть код ниже, который берет html из запроса AJAX, а затем скрывает одну строку таблицы и показывает другую, но даже если var, который я создаю для хранения html (quick_edit_html), доступен после AJAX функция запущена (проверено путем помещения ее в окно предупреждения), Firebug сообщает мне, что ее не существует, когда я пытаюсь использовать ее в следующей функции (которая не работает, пока не будет выполнен запрос AJAX).

Есть идеи, где я иду не так?

/** Run the AJAX request to grab the qucik edit html */
var load_quick_edit = jQuery.post(MyAjax.ajaxurl, data, function(response){
    var quick_edit_html = response;
});

/** Display the correct quick edit row */
load_quick_edit.done(function(){

    /** Hide the row that is to be edited */
    jQuery('tr#display-'+slug).hide();

    /** Show the quick edit row that the user has requested */
    jQuery('tr#quick-edit-'+slug).show();
    jQuery('tr#quick-edit-'+slug).html(quick_edit_html);

});

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Он недоступен, потому что находится вне области видимости. Объявите это за пределами post():

var quick_edit_html;

    /** Run the AJAX request to grab the qucik edit html */
var load_quick_edit = jQuery.post(MyAjax.ajaxurl, data, function(response){
    quick_edit_html = response;
});

    /** Display the correct quick edit row */
load_quick_edit.done(function(){
    /** Hide the row that is to be edited */
    jQuery('tr#display-'+slug).hide();

    /** Show the quick edit row that the user has requested */
    jQuery('tr#quick-edit-'+slug).show();
    jQuery('tr#quick-edit-'+slug).html(quick_edit_html);
});
2 голосов
/ 22 декабря 2011

Ваша переменная объявлена ​​в функции анонимного обратного вызова ajax.Это ограничивает переменную для этой функции, что означает, что к ней нельзя получить доступ из других мест.

Просто объявите переменную вне ваших функций.

var quick_edit_html;

/** Run the AJAX request to grab the qucik edit html */
var load_quick_edit = jQuery.post(MyAjax.ajaxurl, data, function(response){
    quick_edit_html = response;
});

/** Display the correct quick edit row */
load_quick_edit.done(function(){

    /** Hide the row that is to be edited */
    jQuery('tr#display-'+slug).hide();

    /** Show the quick edit row that the user has requested */
    jQuery('tr#quick-edit-'+slug).show();
    jQuery('tr#quick-edit-'+slug).html(quick_edit_html);

});
1 голос
/ 22 декабря 2011

quick_edit_html должен был выйти из области действия в тот момент времени. Вы можете попробовать сохранить его в глобальной области действия или в области прототипа (с ключевым словом this)

...