Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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:ajax请求的包装函数稍后执行主函数_Javascript_Jquery - Fatal编程技术网

中间javascript:ajax请求的包装函数稍后执行主函数

中间javascript:ajax请求的包装函数稍后执行主函数,javascript,jquery,Javascript,Jquery,好的,通常我有一个ajax请求包装函数,在这里我传递$data和$successfunction并执行$.ajax请求 但我要做的是生成另一个函数:$successFunctionB,它将$successfunction作为参数 因此,我将$data和$successFunctionB传递给$.ajax请求 假设这是一个成功的结果$successFunctionB执行$successFunctionB检查数据结果中的值。如果它是某个值,那么它将执行$successfunction。 可能让我困惑

好的,通常我有一个ajax请求包装函数,在这里我传递$data和
$successfunction
并执行
$.ajax
请求

但我要做的是生成另一个函数:
$successFunctionB
,它将
$successfunction
作为参数

因此,我将$data和
$successFunctionB
传递给
$.ajax
请求

假设这是一个成功的结果<代码>$successFunctionB执行<代码>$successFunctionB检查数据结果中的值。如果它是某个值,那么它将执行
$successfunction
。 可能让我困惑的是,ajax请求的SuccessFunction只能有一个参数作为输入,即结果数据

这是我要做的事的错误代码

function ajaxCall($data,$successFunctionA) 
{

var $successFunctionB = function($data,$successFunctionA)
{
                data = jQuery.parseJSON($data);
                if(data.result=='good')
                {
                    $successFunctionA(data);
                }
}

$.ajax(
    {
        type:'POST',
        url:'server.php',
        datatype:'json',
        data:$data,
        success:$successFunctionB,
    });

}

您不需要将$successfunction传递给$successFunctionB-函数B将有权访问函数A,因为在javascript中,函数是闭包。代码如下所示:

function ajaxCall($data,$successFunctionA)
{
    var $successFunctionB = function($data)
    {
        data = jQuery.parseJSON($data);

        if(data.result=='good')
        {
            $successFunctionA(data);
        }
    };

    $.ajax(
    {
        type:'POST',
        url:'server.php',
        datatype:'json',
        data:$data,
        success:$successFunctionB,
    });
}
var $successFunctionB = function($successFunctionA, $data)

这是js中最重要的概念之一,因此如果您不熟悉闭包,我建议您仔细阅读它们:

如果您使用的是jQuery 1.6或更高版本,
$。代理可以应用部分参数:

$.ajax(
{
    type:'POST',
    url:'server.php',
    datatype:'json',
    data:$data,
    success:$.proxy($successFunctionB, this, $successFunctionA)
});
第一个参数是要执行的函数,第二个参数是
指针的上下文。任何后续参数都将传递给
$successFunctionB
函数。最后,
$.ajax
调用将附加自己的数据作为最后一个参数,因此您应该像这样对它们重新排序:

function ajaxCall($data,$successFunctionA)
{
    var $successFunctionB = function($data)
    {
        data = jQuery.parseJSON($data);

        if(data.result=='good')
        {
            $successFunctionA(data);
        }
    };

    $.ajax(
    {
        type:'POST',
        url:'server.php',
        datatype:'json',
        data:$data,
        success:$successFunctionB,
    });
}
var $successFunctionB = function($successFunctionA, $data)