2012-05-31 127 views
0
function getCChatStatus() { 
    jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }).done(function(msg) { 
     var cChatStatus = jQuery.parseJSON(msg); 
     return cChatStatus; 
    }); 
} 

function CChatOptions() { 
    var test = getCChatStatus(); 
    alert(test); 
} 

返回“测试未定义”。 如何解决这个问题?我已经尝试了async:false。调用函数内的ajax函数(jQuery)

谢谢

+0

的可能重复的[从内部的$就返回值()函数(http://stackoverflow.com/questions/8187201/return-value-from-inside-of-ajax-function) – JJJ

回答

0

如果您使用jQuery.ajax等异步函数,则必须使用回调函数来评估结果。

因此,你的getter必须是异步的:

function getCChatStatus(callback){ 
    jQuery.ajax({/*...*/}) 
    .done(function(){ 
    callback(jQuery.parseJSON(msg)) 
    }) 
} 

而且你的测试将有看起来像:

function CChatOptions() { 
    getCChatStatus(function(status){ 
    alert(status) 
    }) 
} 
+0

多数民众赞成在工作,谢谢! – Chris

0

您的getCChatStatus()函数没有返回任何东西。即使使用async: false,您的功能也需要返回$.ajax()调用的返回值。考虑返回从异步$.ajax()调用中获得的实际可观察​​对象并使用该对象,而不是运行同步AJAX请求。

1

Ajax的功能是异步的,当你has'nt尚未返回调用警报。

function getCChatStatus(callback) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }).done(function(msg) { 
     var cChatStatus = jQuery.parseJSON(msg); 
     callback.call(cChatStatus); 
    }); 
} 

function CChatOptions() { 
    getCChatStatus(function(test) { 
     alert(test); 
    }); 
} 

你也可以这样做:

function getCChatStatus() { 
    var CChat = jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }); 
    return CChat; 
} 

function CChatOptions() { 
    var cChatStatus = getCChatStatus(); 
    cChatStatus.done(function(msg) { 
     alert(jQuery.parseJSON(msg)); 
    }); 
} 
+0

第二个人在工作,第一个人似乎没有工作。不管怎么说,还是要谢谢你! – Chris

-1

试试这个应该工作!

function getCChatStatus() { 
     $.ajax({ 
      type: "POST", 
      url: "index.php?page=CChatAction", 
      success:function(msg){ 
      var cChatStatus = jQuery.parseJSON(msg); 
      alert(cChatStatus); //if this alert works then that test will work.. 
      return cChatStatus; 
     }); 
    } 

    function CChatOptions() { 
     var test = getCChatStatus(); 
     alert(test); 
    } 
+1

我看不出我的代码有什么区别? – Chris