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

正在返回“测试未定义”。如何解决这个问题?我已经尝试过异步:假。

谢谢

4

4 回答 4

2

ajax 函数是异步的,在您调用警报时尚未返回。

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));
    });
}
于 2012-05-31T11:00:44.647 回答
1

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

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

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

你的测试必须看起来像:

function CChatOptions() {
  getCChatStatus(function(status){
    alert(status)
  })
}
于 2012-05-31T11:00:28.923 回答
0

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

于 2012-05-31T10:59:12.833 回答
-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);
    }
于 2012-05-31T11:04:21.127 回答