你能存储上一个请求的Ajax变量值吗?

时间:2011-08-22 06:45:23

标签: ajax jquery

我有以下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 个答案:

答案 0 :(得分:1)

听起来你有一些想要在多个功能中共享的状态。分享这种状态的一种方法是使用全局变量。

类似但更受控制的方式是利用词汇范围。创建一个函数,并在该函数的主体中创建共享变量。在该主体的词法范围内定义的函数可以自由地访问该共享变量。词法范围之外的任何人都不能直接触摸变量。

例如:

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.
}());

有关详细信息,请参阅:How to have function recall private variable between invocations

答案 1 :(得分:1)

我通过将PHP变量回显到HTML标记的属性来解决这个问题:

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

然后我在jQuery中设置变量如下:

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

我不确定这是否是最佳方式,但它确实有效。有什么想法吗?