2013-04-30 71 views
0

我有一个函数X1具有类似下面回调的JavaScript

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取决于变量结果的这个值是全局变量一个AJAX调用服务器的东西。

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

问题是因为X1()是异步函数结果,如果结果获取的执行时没有设置。我想我必须做一些类型的回调,看回调的一些例子我是小新这个任何帮助,如何正确安装时,它从X1返回回调使结果的值设置?我有一个以上的函数调用X1()

+0

如果你把“如果(结果==东西){做某事}”成功回调函数中的一部分?如果必要的话,你也可以将它添加到错误回调函数中。 – HartleySan 2013-04-30 00:35:24

+0

我有一个以上的函数调用X1()和diffrently处理结果 – 2013-04-30 00:38:32

回答

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; 
    //... 
} 
+0

但我有功能X1可以由多个功能不仅仅是X11 – 2013-04-30 00:34:19

+0

好被调用,将更新的答案 – 2013-04-30 00:35:46

+0

可以还实现sucess:X1上,然后在成功的底部做回调? sucess:{//做一些 回调} – 2013-04-30 00:51:51

3

单个Ajax调用可以有多个成功的处理程序。返回从x1()jqXHR object,并使用从x11()绑定额外success处理它的.done() method

function x1() 
{ 
    return $.ajax({ 
     ... 
    }); 
} 
function x11() 
{ 
    x1().done(function(msg) { 
     // this is an additional success handler 
     // both handlers will be called 
    }); 
} 
+0

做我需要添加旁阿贾克斯$回报? – 2013-04-30 00:40:27

+0

@JustinHomes - 是的。否则,'x1()'返回'undefined',当你试图调用'x1()。success()'时你会得到一个运行时错误。没有办法“成功”未定义。 – gilly3 2013-04-30 00:42:07

+0

@JustinHomes - 如果你真正的功能实际上并没有立即作出AJAX调用后退出,就可以了'jqXHR'对象存储在一个变量和函数的最后返回变量。是的,谢谢 - – gilly3 2013-04-30 00:45:07