【问题标题】:Why i can't return a Json Object?为什么我不能返回 Json 对象?
【发布时间】:2011-06-28 16:21:17
【问题描述】:

当我尝试从函数返回对象时,我变得不确定。而且我很确定该对象不为空,否则 alert(response.html); 不应该工作。

var Core = {
    "Ajax" : function(url, data){
        $.ajax({
            type: "POST",
            url: host + url,
            data: data,
            success: function(json){
                var response = $.parseJSON(json);
                if(response.status == "200"){
                    alert(response.html);
                    return response;
                }
                else{
                    alert(response.html);
                    return false;
                }
            },
            error:function (xhr, ajaxOptions, thrownError){
                alert(xhr.status);
            }
        });
    }
};

【问题讨论】:

    标签: jquery json return


    【解决方案1】:

    你可能误解了 Ajax 的概念,它是异步的。

    请求完成后,浏览器会调用成功回调。您在成功回调中返回的任何内容都会消失。

    不可能向发起请求的代码行返回某些内容 - 当成功回调触发时,您已经超过了该行。

    【讨论】:

    • 点。但是我已经尝试过异步使用异步选项,但仍然无法正常工作。
    • @Sein async: false 确实使它同步,但它也不是这样工作的 - $.ajax() 将始终返回 XMlHTTPRequest 对象,而不是成功回调的返回值。您可以进行成功回调以将其设置在 XMLHTTP 对象中并从中撬出值,但设置预定义变量 var result = null; $.ajax(....) 可能更容易
    • @Sein:它现在是异步的。你不能从 AJAX 调用中“返回”,你需要使用回调函数。
    【解决方案2】:

    您不能从 异步 函数返回内容。调用$.ajax() 的函数在调用它之后立即返回——(几乎)总是在收到响应之前。 success 回调中的响应做任何你需要做的事情。

    PS:将dataType: 'json' 添加到您的ajax 参数并使用json.status - 无需自己进行解析。

    除此之外,使用 Firebug 的控制台检查您实际从服务器返回的内容(alert() 不是调试器)

    【讨论】:

      【解决方案3】:

      $.ajax 调用不能返回任何内容,它是异步的。您需要让它调用另一个回调函数并将其传递给response

      另外,您不需要$.parseJSON(json)。只需设置dataType: 'json',jQuery 就会为您解析 JSON。

      【讨论】:

        猜你喜欢
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-29
        • 2013-01-17
        • 2019-07-12
        • 2020-02-11
        相关资源
        最近更新 更多