$ .ajax responseText与responseJSON

时间:2015-11-16 16:18:07

标签: javascript jquery ajax responsetext

在比较我的ajax请求的responseJSON和responseText属性时,我发现返回的内容有所不同。

在下图中,您会看到引用responseJSON排除"属性"属性。当我解析并使用responseText时,"属性"财产包括在内。

我之前没有遇到过这种奇怪现象,任何人对于为什么会这样做有任何建议或想法?

编辑1:尝试直接从responseJSON访问属性对象时,未定义属性对象。见下图:

编辑2:我无法在我的jsFiddle(http://jsfiddle.net/madChemist/4hd9cz1g/)中复制此问题。我正在使用jQuery版本2.1.4,这有助于诊断事物。

responseJSON等同于我小提琴中解析的responseText:

Parsed responseText properties - {"border-color":"cyan","border-style":"dashed","border-width":"5px"}
Unoutched responseJSON properties - {"border-color":"cyan","border-style":"dashed","border-width":"5px"}

我在环境和这个环境之间看到的两个差异主要是ajax请求类型是GET而不是POST。与我在环境中加载的数据相比,小提琴中的数据被修剪掉了。我测试了修剪过的&没有修剪,这对我的发现没有影响。

编辑3:我已经拍摄了一些代码截图,以展示我尝试做的事情。当我在单元测试模块中的第二个断言中获得断点时,我记录了最初拍摄的屏幕截图。

1 个答案:

答案 0 :(得分:0)

我的测试现在正在通过。我的问题实际上可能与QUnit的范围有关。当我对我的测试做出这些改变时,上面的奇怪行为消失了:

Bridging-Header.h

专门做了这个改变:

QUnit.test("Method exportLayout", 2, function (assert) {
    var done = assert.async();

    $('body').append('<div id="application" style="display:none;"></div>');
    var controller = new ApplicationController();
    controller.createApplicationWorkspace();

    var load = controller.loadLocalProject(); // Pulls in local JSON file
    load.complete(function (request) {
        var loaded = request.responseJSON; //$.parseJSON(request.responseText); 
        controller.setUpLayout($.parseJSON(request.responseText)); // Creates workspace from saved state

        var result = controller.generateLayout(); // Generates Object.  Data property should equal what was loaded in originally.
        assert.ok(result !== undefined && result.data !== undefined, "Application controller generates layout response in a proper format.");
        assert.deepEqual(loaded, result.data, "Freshly generated export is the same as initially loaded in import.");

        // Teardown
        setTimeout(function () {
            controller.layout.destroy();
            $('#application').remove();
            done();
        }, 0);

    });
});

controller.setUpLayout($.parseJSON(request.responseText)); 方法长达几百行,但这就是它开始的方式:

setUpLayout

我觉得这里可能还有其他东西在工作,但我想用我刚发现的内容更新这篇文章。希望其他人可能会注意到我没有注意到的东西。