-2

我编写了以下函数,因此我不需要为我拥有的每个事件重写 ajax 调用。

function ajaxCall(){
        var params = new Array();

        for(var i = 0; i < arguments.length; i++ ){
            params[i] = arguments[i];
        }

        $.ajax({
            url: params[0],
            type: params[1],
            data: params[2],
            dataType : "json",
            beforeSend: function(x) {
                if(x && x.overrideMimeType){
                    x.overrideMimeType("application/json;charset=UTF-8");
                }
            }
        });
    }

由于 ajax 是异步的,当调用成功时,我不能简单地从 ajaxCall 函数返回结果。如何创建成功回调函数?我已经尝试过了,但它可能是错误的。请帮助我,因为我是 jquery 和 javascript 的新手。

ajaxCall("/getItemGroups", "POST" , data).success(function(){
            alert("success");
        });
4

4 回答 4

5

您的代码中没有任何内容可以激发arguments手动抓取集合。使用命名参数:

function ajaxCall(url, type, data, callback){
    $.ajax({
        url: url,
        type: type,
        data: data,
        dataType : "json",
        success: callback,
        beforeSend: function(x) {
            if(x && x.overrideMimeType){
                x.overrideMimeType("application/json;charset=UTF-8");
            }
        }
    });
}

像这样调用:

ajaxCall("/getItemGroups", "POST", data, function() {
    alert('success');
});

$.ajax不过,我必须说,生成的函数对手动执行的功能几乎没有增加。例如,您可能$.ajaxSetup对定义全局beforeSend回调更感兴趣。

在您的代码中的任何地方,调用

$.ajaxSetup({
    dataType : "json",
    beforeSend: function(x) {
        if(x && x.overrideMimeType){
            x.overrideMimeType("application/json;charset=UTF-8");
        }
    }
});

然后你的

ajaxCall('/getItemGroups', 'POST', data, function() { ... });

将等同于

$.post('/getItemGroups', data, function() { ... });

(当然也有$.get等价的)

于 2013-05-08T09:51:56.473 回答
3

jQuery.ajax()函数返回一个Deferred object,您的ajaxCall函数可以返回该对象。然后您可以使用 Deferred 对象的.done()函数为其添加成功回调函数。

function ajaxCall() {
    ...

    return $.ajax({
        // options
    });
}

然后像这样使用它:

ajaxCall(arguments).done(function(data) {
    // your logic here
});
于 2013-05-08T09:56:25.020 回答
1

使用success选项:

   $.ajax({
            url: params[0],
            type: params[1],
            data: params[2],
            dataType : "json",
            success: function(data) { alert(data); },
            beforeSend: function(x) {
                if(x && x.overrideMimeType){
                    x.overrideMimeType("application/json;charset=UTF-8");
                }
            }
        });

http://api.jquery.com/jQuery.ajax/

  function AJAXCall(successFunction) {
       $.ajax({
                url: params[0],
                type: params[1],
                data: params[2],
                dataType : "json",
                success: successFunction,
                beforeSend: function(x) {
                    if(x && x.overrideMimeType){
                        x.overrideMimeType("application/json;charset=UTF-8");
                    }
                }
            });
  }
于 2013-05-08T09:50:09.573 回答
0

我使用这样的东西:

AjaxGET = function (myUrl, myData) {
    var result = $.ajax({
        type: "GET",
        url: myUrl,
        data: myData,
        dataType: 'html',
        async: false,
        success: function (data) {
        }
    }) .responseText ;
return  result;
}   

var myAjaxResponce = AjaxGet(myUrl, myData);

于 2013-05-08T09:52:35.587 回答