jQuery $.ajax(),将成功数据传递给单独的函数

Posted

技术标签:

【中文标题】jQuery $.ajax(),将成功数据传递给单独的函数【英文标题】:jQuery $.ajax(), pass success data into separate function 【发布时间】:2011-01-25 02:19:17 【问题描述】:

我正在使用 jQuery $.ajax() 函数。我已将其放入父函数中,该函数将一些值传递给 ajax 函数。我想做的是有一个用户定义的回调函数,它获取从ajax成功函数传入的数据参数。

这是我认为可行的方法,但事实并非如此:

testFunc = function(str, callback) 
    // Send our params
    var data = 'some data to send';
    $.ajax(
        type: 'POST',
        url: 'http://www.myurl.com',
        data: data,
        success: callback
    );

然后我希望能够调用该函数,并传入我的自定义函数,以便我可以使用该函数内部的成功函数数据:

testFunc('my string data', function(data)
    alert(data);
);

我希望这与以下内容相同:

testFunc = function(str, callback) 
    // Send our params
    var data = 'some data to send';
    $.ajax(
        type: 'POST',
        url: 'http://www.myurl.com',
        data: data,
        success: function(data) 
            alert(data);
        
    );

【问题讨论】:

你确定你获得了“成功”吗? 是的,我正在通过“成功”获取一些数据。 【参考方案1】:

对我来说很好用:

<script src="/jquery.js"></script>
<script>
var callback = function(data, textStatus, xhr)

    alert(data + "\t" + textStatus);


var test = function(str, cb) 
    var data = 'Input values';
    $.ajax(
        type: 'post',
        url: 'http://www.mydomain.com/ajaxscript',
        data: data,
        success: cb
    );

test('Hello, world', callback);
</script>

【讨论】:

不知道我错过了什么,但按照你的例子,它工作得很好。谢谢!【参考方案2】:

您可以使用 this 关键字访问自定义数据,传递给 $.ajax() 函数:

    $.ajax(
        // ... // --> put ajax configuration parameters here
        yourCustomData: param1: 'any value', time: '1h24',  // put your custom key/value pair here
        success: successHandler
    );

    function successHandler(data, textStatus, jqXHR) 
        alert(this.yourCustomData.param1);  // shows "any value"
        console.log(this.yourCustomData.time);
    

【讨论】:

这是一个不错的、干净的方法,它不涉及创建新函数。谢谢!【参考方案3】:

我就是这样做的

function run_ajax(obj) 
    $.ajax(
        type:"POST",
        url: prefix,
        data: obj.pdata,
        dataType: 'json',
        error: function(data) 
            //do error stuff
        ,
        success: function(data) 

            if(obj.func)
                obj.func(data); 
            

        
    );


alert_func(data)
    //do what you want with data


var obj= ;
obj.pdata = sumbit:"somevalue"; // post variable data
obj.func = alert_func;
run_ajax(obj);

【讨论】:

我敢肯定,对于一个简单的用例,您不会像那样单独声明对象属性,为什么不使用对象文字呢? "pdata":"submit":"somevalue","func":alert_func请问这对JS中的GC有什么影响(如果有的话)?【参考方案4】:

在第一个代码块中,您永远不会使用str 参数。您的意思是说以下内容吗?

testFunc = function(str, callback) 
    $.ajax(
        type: 'POST',
        url: 'http://www.myurl.com',
        data: str,
        success: callback
    );

【讨论】:

【参考方案5】:

我相信你的问题是你传递 testFunct 一个字符串,而不是一个函数对象,(这甚至可能吗?)

【讨论】:

【参考方案6】:

虽然我不能 100% 确定您想要什么(可能我今天的大脑很慢),但这里有一个与您描述的类似用途的示例:

function GetProcedureById(procedureId)

    var includeMaster = true;
    pString = '"procedureId":"' + procedureId.toString() + '","includeMaster":"' + includeMaster.toString() + '"';
    $.ajax(
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: pString,
        datatype: "json",
        dataFilter: function(data)
        
            var msg;
            if (typeof (JSON) !== 'undefined' &&
                    typeof (JSON.parse) === 'function')
                msg = JSON.parse(data);
            else
                msg = eval('(' + data + ')');
            if (msg.hasOwnProperty('d'))
                return msg.d;
            else
                return msg;
        ,
        url: "webservice/ProcedureCodesService.asmx/GetProcedureById",
        success: function(msg)
        
            LoadProcedure(msg);
        ,
        failure: function(msg)
        
            // $("#sometextplace").text("Procedure did not load");
        
    );
;
/* build the Procedure option list */
function LoadProcedure(jdata)

    if (jdata.length < 10)
    
        $("select#cptIcdProcedureSelect").attr('size', jdata.length);
    
    else
    
        $("select#cptIcdProcedureSelect").attr('size', '10');
    ;
    var options = '';
    for (var i = 0; i < jdata.length; i++)
    
        options += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>';
    ;
    $("select#cptIcdProcedureSelect").html(options);
;

【讨论】:

以上是关于jQuery $.ajax(),将成功数据传递给单独的函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery ajax 将数据传递给 php 的问题

jQuery 将 Ajax 调用中的数据传递给 MVC 操作方法

ajax GET类型不将数据传递给烧瓶

通过 AJAX 将数据传递给 Laravel 控制器

将 JSON 数据传递给控制器​​方法而无需声明对象

AJAX 未将 Handsontable 数据传递给控制器