我有以下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中存储值,然后检索它?
答案 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');
我不确定这是否是最佳方式,但它确实有效。有什么想法吗?