1

我对我们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);
                }

            });

        });
    });

这是确实有效的dojo代码。

    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"]}
4

1 回答 1

0

好吧,我有两个猜测:

  1. 您的 JSON 格式不正确。从技术上讲,所有 JSON 字段名称和字符串都必须是:“双引号”。
  2. 没有发送正确的Content-Type: application/json标题

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


我猜是#1

于 2012-11-04T17:02:43.817 回答