【发布时间】:2012-11-05 01:02:43
【问题描述】:
我对我们 DOJO 有要求。在进行单元测试时,我使用了一个简单的 *.json 文件,并且我正在制作一个简单的 xhr.get 或 request.get 调用,如代码所示。
但是,当我使用配置选项“handleAs:'json'”时,dojo/request 无法解析它接收到的 json
这里是“roles.data.json”文件的内容:
{roles:["Role - A", "Role - B", "Role - C", "Role - D", "Role - E"]}
这是不起作用的dojo代码
require([
'dojo/dom',
'dojo/on',
'dojo/ready',
'dojo/parser',
'dojo/request',
'dijit/registry',
'dijit/form/Form',
'dijit/form/TextBox',
'dijit/form/ValidationTextBox',
'dijit/form/ComboBox',
"dojo/domReady!"
], function (dom, on, ready, parser, request, registry) {
ready(function () {
console.log("ready");
request.get("http://localhost/dojofun/data/roles.data.json", {
//offending piece of code here, if I remove this, request works as string
handleAs :'json',
//headers : { 'mime-type': 'application/json' }
}).then (function (data) {
try {
console.log(data)
//var d = eval(data);
console.log(data.roles[0]);
}
catch (err) {
console.log(err);
}
});
});
});
这里是有效的道场代码。
require([
'dojo/dom',
'dojo/on',
'dojo/ready',
'dojo/parser',
'dojo/_base/xhr',
'dijit/registry',
'dijit/form/Form',
'dijit/form/TextBox',
'dijit/form/ValidationTextBox',
'dijit/form/ComboBox',
"dojo/domReady!"
], function (dom, on, ready, parser, xhr, registry) {
ready(function () {
console.log("ready");
xhr.get({
url:"http://localhost/dojofun/data/roles.data.json",
handleAs :'json',
load:function (data) {
try {
console.log(data)
console.log(data.roles[0]);
}
catch (err) {
console.log(err);
}
}
});
});
});
我的问题是,当我使用 request.get 时,我错过了什么?我必须进行额外的导入吗?
================
好的!发现错误..这很愚蠢,但您的 JSON 必须用双引号引起来....单引号会导致语法错误。正确的 JSON 现在看起来像这样:
{"roles":["Role - A", "Role - B", "Role - C", "Role - D", "Role - E"]}
【问题讨论】:
-
JavaScript 控制台中是否显示任何错误?您可以向您的
.then()添加错误回调并记录任何错误对象吗? -
不,没有错误......它似乎没有进入 --> then(function (data){})
-
如果没有错误回调,您将忽略 xhr 调用期间的任何错误:
then(function(data){}, function(error) {console.log(error)}) -
我确实收到以下错误:XHR 完成加载:“localhost/dojofun/data/roles.data.json”。 SyntaxError arguments: Array[1] 0: "'" length: 1 proto: Array[0] get message: function () { [native code] } get stack: function () { [native code ] } 响应:对象集消息:函数(){[本机代码]}设置堆栈:函数(){[本机代码]}类型:“unexpected_token”proto:错误参数:未定义的构造函数:函数SyntaxError() { [native code] } name: "SyntaxError" stack: undefined type: undefined proto: d modifyuser.html:134
-
但是不明白token在哪里不应该???
标签: dojo xmlhttprequest request