0

我有一个函数 x1,它对服务器有一个 ajax 调用,如下所示

var result;

function x1()
{
    $.ajax({
        type: Type, //GET or POST or PUT or DELETE verb
        url: Url, // Location of the service        
        contentType: ContentType, // content type sent to server
        dataType: DataType, //Expected data format from server        
        success: function (msg) {//On Successfull service call
            result = msg.GetUrlContentResult; 
        },
        error: function (xhr, ajaxOptions, thrownError) {

        }
    });
}

我有另一个函数 x11 调用 x1 取决于变量结果的这个值,它是全局变量。

function x11()
{
    x1();
    if (result==something)
    {do something}
}

问题是由于 x1() 是异步函数,因此在执行 if 结果获取时未设置结果。我想我必须做某种类型的回调,查看一些回调示例我对此并不陌生,任何帮助如何正确设置回调,以便在从 x1 返回时设置结果值?我有不止一个函数调用 x1()

4

2 回答 2

3

单个 ajax 调用可以有多个成功处理程序。使用以下方法返回jqXHR对象x1()并将附加success处理程序绑定到它:x11().done()

function x1()
{
    return $.ajax({
        ...
    });
}
function x11()
{
    x1().done(function(msg) {
        // this is an additional success handler
        // both handlers will be called
    });
}
于 2013-04-30T00:38:36.980 回答
2

您要做的实际上是这样简单的事情:(针对动态回调进行了编辑)

function x1(callback)
{
    $.ajax({
        type: Type, //GET or POST or PUT or DELETE verb
        url: Url, // Location of the service        
        contentType: ContentType, // content type sent to server
        dataType: DataType, //Expected data format from server        
        success: callback,
        error: function (xhr, ajaxOptions, thrownError) {

        }
    });
}

x1(x11);

您必须修改 x11 函数以接受msg参数并更新result变量:

function x11(msg) {
    result = msg.GetUrlContentResult;
    //...
}
于 2013-04-30T00:33:06.840 回答