Можете ли вы сохранить значение переменной Ajax из предыдущего запроса? - PullRequest
0 голосов
/ 22 августа 2011

У меня есть следующий код jQuery Ajax, и может показаться (если только я не понял проблему), что без определения переменной page в $("#imgNum").change(function(){}); вызов ajax, следующий за функцией, не сработает.

Поскольку переменная page устанавливается в зависимости от того, когда нажата кнопка (что вызывает собственный вызов ajax), мне интересно, есть ли способ установить page равным последнему значению, которое онабыл установлен на?Если нет другого способа сохранить это значение для вызова и обновлять его каждый раз при выполнении определенной функции?

JQuery:

function loadData(page, value){
    loading_show();
    gallery_hide();                    
    $.ajax
    ({
        type: "GET",
        url: "new_arrivals_data.php",
        data: {page:page, imgs:value},
        success: function(msg) {
            gallery_show();
            $("#gallery_container").ajaxComplete(function(event, request, settings)
            {
                gallery_show();
                $("#gallery_container").html(msg);
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
            // Tell the human that something broke.
        },
        complete: function() {
            // This is always called regardless of success or failure.
            loading_hide();
        }
    });
}
loadData(1);  // For first time page load default results
$('#gallery_container .pagination li.active').live('click',function(){
    var page = $(this).attr('p');
    loadData(page);
});           
$('#go_btn').live('click',function(){
    var page = parseInt($('.goto').val());
    var no_of_pages = parseInt($('.total').attr('a'));
    if(page != 0 && page <= no_of_pages){
        loadData(page);
    }else{
        alert('Enter a PAGE between 1 and '+no_of_pages);
        $('.goto').val("").focus();
        return false;
    }
});

$("#imgNum").change(function(){
    var sel = $(this);
    var value = sel.val();
//THIS IS WHERE I WANT TO DEFINE THE PAGE BASED ON IT'S MOST RECENT VALUE
    var page = ?;
    loadData(page, value);
})
//You should store the current selected option in a cookie
//For the sake of the example i'll set the default permanently to 12
var imgNum_selected = 16;

//set the initial selected option and trigger the event
$("#imgNum [value='"+imgNum_selected+"']").prop("selected","selected").change();

Будетэто можно сделать, сохранив текущее значение в файле cookie, который резервируется при каждом изменении значения?Как вы сохраняете значение в файле cookie, а затем извлекаете его?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я решил это, вставив переменную PHP в атрибут тега HTML:

<b id='cur_page' cur_page='" . $cur_page . "'></b>

Затем я установил переменную в jQuery следующим образом:

var page = $('#cur_page').attr('cur_page');

Яне уверен, что это лучший способ сделать это, но он работает.Есть мысли?

1 голос
/ 22 августа 2011

Похоже, у вас есть состояние, которое вы хотите использовать в нескольких функциях.Один из способов поделиться этим состоянием - использовать глобальную переменную.

Аналогичным, но более контролируемым способом является использование лексической области действия.Создайте функцию, и в теле этой функции вы создадите переменную общего доступа.Функции, определенные в лексической области этого тела, могут свободно обращаться к этой общей переменной.Любой, находящийся за пределами лексической области, не может напрямую коснуться переменной.

Например:

var funcs = (function() {
    var sharedState = 0;

    var f1 = function() { 
        sharedState++;
    };

    var f2 = function() { return sharedState; };

    return { 'f1': f1, 'f2' : f2 };
}());

funcs.f1();
alert(funcs.f2());
funcs.f1();
alert(funcs.f2());

// sharedState = -20;  // should error out, because sharedState can't be
// accessed directly.

В вашем конкретном контексте вы можете сделать что-то вроде:

(function() {
   var page;

   // ... rest of your code, but in your loadData function, assign to page.
}());

См .: Как заставить функцию вызывать приватную переменную между вызовами для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...