当前位置: 首页 > 面试题库 >

如何在第一个和更新页面成功的情况下调用第二个jQuery.ajax实例

阎晋
2023-03-14
问题内容

我有一些单击与类的链接时触发的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