两个Ajax onclick事件

Two Ajax onclick events

本文关键字:事件 onclick Ajax 两个      更新时间:2023-09-26

所以我不得不修改一些旧的现有代码,并添加另一个ajax事件到onclick所以它有onclick="function1(); function2();"

这在我们的测试环境中工作得很好,因为它是一个缓慢的VM,但在我们的活动环境中,它会导致一些问题,因为function1()必须在function2()被调用之前完成更新一些记录。

是否有一个很好的方法来解决这个问题,而不修改function2()的js,因为这是由其他事件调用的现有代码。

谢谢

从function1返回时调用function2:

function function1() {
$.ajax({
    type: "POST",
    url: "urlGoesHere",
    data: " ",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (result) {
        //call function2
    },
    error: 
});
}

您需要使用ajax方法的always callback,查看$.ajax()方法的always callback http://api.jquery.com/jquery.ajax/.

给opiton的回调在ajax请求完成时执行。这里有一个建议:


function function1() {
    var jqxhr = $.ajax({
        type: "POST",
        url: "/some/page",
        data: " ",
        dataType: "dataType",
    }).always(function (jqXHR, textStatus) {
        if (textStatus == 'success') {
            function2();
        } else {
            errorCallback(jqXHR);
        }
    });
}

我假设你使用原型JS和AJAX,因为你的标签。你应该使用回调函数:

function function1(callback) {
    new Ajax.Request('http://www.google.nl', {
        onSuccess: function(response) {
            callback();
        }
    });
}
function function2(callback) {
    new Ajax.Request('http://www.google.nl', {
        onSuccess: function(response) {
            callback();
        }
    });
}
function both() {
    function1(function() {
        function2();
    });
}

然后在html元素上使用onclick="both();"

示例:http://jsfiddle.net/EzU4p/

Ajax有async属性,可以设置为false。这样,您可以等待该函数完成调用并设置一些值。它实际上违背了AJAX的目的,但它可能会节省您的时间。

我最近有类似的问题,不知何故,在完成function1后调用function2工作得很好。我最初试图在function1成功时调用function2,但没有成功。

      $.ajax({
                type: "POST",
                url: "default.aspx/function1",
                data: "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: false, // to make function Sync
                success: function (msg) {
                    var $data = msg.d;
                    if ($data == 1)
                    {
                        isSuccess = 'yes'
                    }
                },
                error: function () {
                    alert('Error in function1');
                }
            });
            // END OF AJAX
           if (isSuccess == 'yes') {
                // Call function 2
           }