jQuery:奇怪的行为 - XHTTPResponses vs promises / wrappers

时间:2014-04-14 14:43:11

标签: jquery ajax

拥有此代码:

(function($) {

    $(function(){
        $("div.cotizador ul > li > a.cotizador").click(function(){
            var data = {
                concesionaria: $(this).data("concesionaria"),
                modelo: $(this).data("modelo")
            };

            var promise = $.get("ir-a-concesionaria", data, function(data){
                if ("success" in data) {
                    window.location.href = data.success.redirect;
                } else {
                    alert("No se puede seleccionar el modelo especificado. Consulte con el administrador del sitio.");
                }
            }, "application/json");
            console.log(data);
            console.log(promise);
            promise.fail(function(xhr, errorType, errorDescription){
                alert("Ocurrió un error interno. Intente nuevamente más tarde");
            });
        });
    });

})(jQuery);

(目前哪个HTML实际触发回调并不重要)。

当达到console.log(promise)指令时,Google Chrome会在控制台调试消息中显示:

XMLHttpRequest {statusText: "", status: 0, response: "", responseType: "", responseXML: null…}

这意味着:$ .get返回的结果不是包含承诺的XHTTP(因此,.fail方法不存在)。

同时,调试data对象会假设{modelo:"xxx", concesionaria:"yyy"}假设" xxx"和" yyy"具有明确定义和期望的值(这意味着:当我触发的错误被触发时,数据被定义并且没有错误。)

HOWEVER 当我将代码复制粘贴到控制台,并用文字对象替换data参数时,例如:

jQuery.get("ir-a-concesionaria", {modelo:'toyota-gt86', concesionaria:'casabaca'}, function(data){
    if ("success" in data) {
        window.location.href = data.success.redirect;
    } else {
        alert("No se puede seleccionar el modelo especificado. Consulte con el administrador del sitio.");
    }
}, "application/json");

返回的对象(如Google Chrome控制台中所示)是一个包含承诺的对象(如文档中所述)。

问题:为什么会发生这种情况?

(即使这可能是无用的:目前我正在使用Drupal 7)

1 个答案:

答案 0 :(得分:0)

找到答案(Drupal Sucks):

首先,加载1.4.4版本的jQuery。然后,调用该函数。最后,加载了jQuery的1.10.1版本。在那之后,我重复了测试用例,当然,它工作了 - .-''。