在比较我的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:我已经拍摄了一些代码截图,以展示我尝试做的事情。当我在单元测试模块中的第二个断言中获得断点时,我记录了最初拍摄的屏幕截图。
答案 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
我觉得这里可能还有其他东西在工作,但我想用我刚发现的内容更新这篇文章。希望其他人可能会注意到我没有注意到的东西。