我有一些单击与类的链接时触发的jQuery 'changetag'
。我$.ajax()
用来通过changetag.php更新数据库。
然后,通过在开/关之间切换类来更改链接的外观。代码如下:
$(function() {
$(".changetag").click(function(){
var element = $(this);
var I = element.attr("id");
var info = 'switch_tag=' + I;
$.ajax({
type: "POST",
url: "_js/changetag.php",
data: info,
success: function(){}
});
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
return false;
});
});
完美运作。但是现在我想添加第二个PHP调用,如果以上操作成功,它将调用数据并更新页面的另一个区域。
我要添加的是:
$.ajax({
url: "_js/loaddata.php",
success: function(results){
$('#listresults').empty();
$('#listresults').append(results);
}
});
但是仅仅将其添加到成功中:function(){}似乎没有用。为了澄清,这是我正在测试的完整代码:
$(function() {
$.ajaxSetup ({cache: false});
$(".changetag").click(function(){
var element = $(this);
var I = element.attr("id");
var info = 'switch_tag=' + I;
$.ajax({
type: "POST",
url: "_js/changetag.php",
data: info,
success: function(){
$.ajax({
url: "_js/loaddata.php",
success: function(results){
$('#listresults').empty();
$('#listresults').append(results);
}
});
}
});
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
return false;
});
});
PHP脚本都可以成功调用,并且toggle类也可以工作,但是由于某种原因,提取的数据未写入#listresults。
Ajax调用(默认情况下)是 异步的 。这意味着该代码:
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
return false;
可以在其前面的ajax调用完成之前执行。对于刚接触Ajax和异步代码执行的程序员来说,这是一个普遍的问题。在ajax调用完成后,您要执行的所有操作都必须放入
回调中 ,例如您的success
处理程序:
$.ajax({
type: "POST",
url: "_js/changetag.php",
data: info,
success: function(){
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
}
});
同样,您也可以在其中放置第二个ajax调用:
$.ajax({
type: "POST",
url: "_js/changetag.php",
data: info,
success: function(){
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
$.ajax({
url: "_js/loaddeals_v2.php",
success: function(results){
$('#listresults').empty();
$('#listresults').append(results);
}
});
}
});
使用jQuery 1.5的Deferred Object,您可以使它更加流畅。
function firstAjax() {
return $.ajax({
type: "POST",
url: "_js/changetag.php",
data: info,
success: function(){
$("#li_"+I).toggleClass("off on");
element.toggleClass("off on");
}
});
}
// you can simplify this second call and just use $.get()
function secondAjax() {
return $.get("_js/loaddata.php", function(results){
$('#listresults').html(results);
});
}
// do the actual ajax calls
firstAjax().success(secondAjax);
这很不错,因为它可以使您取消嵌套回调-您可以编写异步执行的代码,但编写的方式类似于同步执行的代码。
问题内容: 如何在不刷新页面的情况下更改URL? 我已经用CodeIginer建立了一个网站,我想在我的页面之一中实现AJAX和JQuery。问题是; 当我加载内容时,URL不会改变。 假设我有URL 和另一个URL: 单击按钮时如何将第一个URL更改为第二个URL? 问题答案: 在HTML5中,您可以更改URL: 检查http://spoiledmilk.com/blog/html5-chang
问题内容: 我有一个JavaScript函数,该函数使用jQuery发出两个连续的Ajax请求。我想确保在调用第二个函数之前已加载第一个请求。有办法吗? 问题答案: 在选项中指定,或在第一个调用的回调中进行第二个ajax 调用。
问题内容: 储存程序 在此存储过程中,我有两个update语句。如果第一次更新成功执行,然后第二次执行。需要进行哪些更改? 问题答案: 在第一个之后,您可以检查受影响的行数。 如果返回的结果是所需的更新数量(可能> 0),则仅触发第二个。 可以通过检查受影响的行数来包围第二个。
问题内容: 这是阿贾克斯 这可行,但是我希望更改URL,因为我在那里有很多参数,当然还有该参数。 问题答案: 您可以对成功的动作执行此操作: 有关基本操作方法,请参见这篇文章,以在不重新加载页面的情况下修改URL。 附加说明: 第一个参数是网页状态更改时(例如,每当有人在浏览器中按下后退或前进按钮时)所需的数据。请注意,在Firefox中,此数据限制为640k个字符。 title是第二个参数,可以
我的屏幕上有两个组件,第一个是图像,第二个是下面的网格和图表。我想使图像居中,使其水平地位于中心,并且在第二个组件之上。第二个组件应该在图像的下方,而不是它的右边。我该怎么做呢? 我试过衬垫和对齐,但这些似乎对我不起作用。
问题内容: 我正在有限的时间里进行学校项目,导致代码混乱和混乱。我正在尝试打开两个jFrame,一个显示聊天界面,另一个显示图像。从第一个窗口调用时,我想调用一个方法,该方法多次更改第二个窗口上的图像,并且之间有一些延迟。但是,图像不会改变。 我认为我的问题是由于在文本窗口中使用了一些示例代码,并试图合并我自己的修改而没有完全理解前者。在尝试查找此问题时,我仅发现人们根据计时器和in来更新其jFr