能否存储来自上一个请求的Ajax变量值?

能否存储来自上一个请求的Ajax变量值?,ajax,jquery,Ajax,Jquery,我有下面的jQuery Ajax代码,如果不在$(“#imgNum”).change(function(){})中定义页面变量,似乎(除非我误解了这个问题),函数后面的ajax调用将不会启动 由于page变量是根据按钮的点击时间设置的(fire自己的ajax调用),我想知道是否有办法将page设置为等于上次设置的值?除非有其他方法保存此值以调用它,并在每次执行某个函数时刷新它 jQuery: function loadData(page, value){ loading_show();

我有下面的jQuery Ajax代码,如果不在
$(“#imgNum”).change(function(){})中定义
页面
变量,似乎(除非我误解了这个问题),函数后面的ajax调用将不会启动

由于
page
变量是根据按钮的点击时间设置的(fire自己的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();
函数加载数据(页面,值){
加载_show();
画廊藏品();
$.ajax
({
键入:“获取”,
url:“new_arrivals_data.php”,
数据:{page:page,imgs:value},
成功:功能(msg){
画廊(展览);
$(“#gallery_container”).ajaxComplete(功能(事件、请求、设置)
{
画廊(展览);
$(“#图库"容器”).html(msg);
});
},
错误:函数(jqXHR、textStatus、errorshown){
//告诉那个人有东西坏了。
},
完成:函数(){
//无论成功或失败,这总是被称为。
加载_hide();
}
});
}
加载数据(1);//首次页面加载默认结果
$('#gallery_container.pagination li.active').live('click',function()){
var page=$(this.attr('p');
装载数据(第页);
});           
$('gobtn').live('click',function(){
var page=parseInt($('.goto').val());
var no_of_pages=parseInt($('.total').attr('a');

如果(page!=0&&page听起来您有一些状态要在多个函数之间共享。共享此状态的一种方法是使用全局变量

一种类似但更受控制的方法是利用词法作用域。创建一个函数,然后在该函数体中创建共享变量。在该函数体的词法作用域中定义的函数可以自由访问该共享变量。词法作用域之外的任何人都不能直接接触该变量

例如:

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

请参阅:了解更多信息。

我通过在HTML标记的属性中回显PHP变量解决了这个问题:

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

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

我不清楚这个问题………@K.B好的,我非常乐意澄清。你不明白什么?基本上,有三个jQuery事件可以触发Ajax调用。最后一个事件需要定义
页面
变量,但必须是由于
页面
仅在单击某个内容时定义,我不知道如何将先前为
页面
设置的值传递为
页面
的当前值。这更有意义吗?或者您必须将页面变量设为全局变量,或者将其保存在DOM中的某个位置并加载到imgnum中。@Pehmolelu那么这是否意味着即使变量依赖于客户端的输入,它也会保持上一次调用的值?您需要一个全局变量或者您需要一个会话变量HMMM听起来很有趣。我将进一步研究并尝试一下。谢谢。但是,好奇的是,它是否也能保持最新的值cookie中的变量?我在实现这一点上遇到了问题。你的字面意思是仅仅用
(function(){var page;}());
来包围我的代码吗?我只是不确定要将你好心提供给我的示例代码放在哪里,以及放在里面的值是什么。
var page = $('#cur_page').attr('cur_page');