在函数内调用ajax函数(jQuery)

时间:2012-05-31 10:53:52

标签: jquery ajax asynchronous

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

正在返回“test is undefined”。 如何解决这个问题?我已经尝试过异步:false。

由于

4 个答案:

答案 0 :(得分:1)

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

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

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

你的测试必须看起来像:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-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);
    }