【问题标题】:DOJO ... dojo/_base/xhr vs dojo/request APIDOJO ... dojo/_base/xhr vs dojo/request API
【发布时间】: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


【解决方案1】:

嗯,我有两个猜测:

  1. 您的 JSON 格式不正确。从技术上讲,所有 JSON 字段名称和字符串都必须是:“双引号”。
  2. 你是not sending the proper Content-Type: application/json header:

除了在响应中将数据编码为 JSON 之外,还设置 应用程序/json 的 Content-Type 标头,或者使用服务器 配置,例如 Apache 的 AddType 或将其添加到标头中 服务器端代码。


我猜是#1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多