Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery$.ajax(),将成功数据传递到单独的函数中_Javascript_Jquery_Ajax_Callback - Fatal编程技术网

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

Javascript jQuery$.ajax(),将成功数据传递到单独的函数中,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,我正在使用jQuery$.ajax()函数。我已将其放入父函数中,该函数将一些值传递给ajax函数。我想做的是有一个用户定义的回调函数,它获取从ajax成功函数传入的数据参数 以下是我认为可行的方法,但事实并非如此: testFunc = function(str, callback) { // Send our params var data = 'some data to send'; $.ajax({ type: 'POST', ur

我正在使用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);
        }
    });
}
对我来说很好:

<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>

var callback=函数(数据、文本状态、xhr)
{
警报(数据+“\t”+文本状态);
}
var测试=功能(str、cb){
变量数据='输入值';
$.ajax({
键入:“post”,
网址:'http://www.mydomain.com/ajaxscript',
数据:数据,
成功:cb
});
}
测试(“你好,世界”,回调);

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

虽然我不能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);
};
函数getProcedureByd(procedureId) { var includeMaster=true; pString='{“procedureId”:“+procedureId.toString()+”,“includeMaster”:“+includeMaster.toString()+”}”; $.ajax({ 类型:“POST”, contentType:“应用程序/json;字符集=utf-8”, 数据:pString, 数据类型:“json”, 数据过滤器:函数(数据) { var-msg; if(typeof(JSON)!=‘未定义’&& typeof(JSON.parse)==“函数”) msg=JSON.parse(数据); 其他的 msg=eval(“(“+数据+”)”); if(msg.hasOwnProperty('d')) 返回msg.d; 其他的 返回味精; }, url:“webservice/ProcedureCodesService.asmx/getprocedurebyd”, 成功:功能(msg) { 加载程序(msg); }, 故障:功能(msg) { //$(“#sometextplace”).text(“过程未加载”); } }); }; /*构建过程选项列表*/ 函数加载过程(jdata) { 如果(jdata.length<10) { $(“选择#cptIcdProcedureSelect”).attr('size',jdata.length); } 其他的 { $(“选择#cptIcdProcedureSelect”).attr('size','10'); }; var选项=“”; 对于(var i=0;i在第一个代码块中,您从未使用
str
参数。你的意思是说:

testFunc = function(str, callback) {
    $.ajax({
        type: 'POST',
        url: 'http://www.myurl.com',
        data: str,
        success: callback
    });
}
我就是这样做的

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);

您可以使用关键字访问自定义数据,并将其传递给$.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);
    }

你确定你获得了“成功”吗?是的,我通过“成功”获得了一些数据。不确定我遗漏了什么,但按照你的例子,它工作得非常好。谢谢这是一种很好的、干净的方法,不需要创建新函数。非常感谢。我相信对于一个简单的用例,您不会单独声明对象属性,为什么不使用对象文本呢<代码>{“pdata”:{“submit”:“somevalue”},“func”:alert_func}我可以问一下这对JS中的GC有什么影响(如果有)?