DOJO ... dojo / _base / xhr vs dojo / request API

时间:2012-11-03 20:50:09

标签: dojo xmlhttprequest request

我向DOJO提出要求。在进行单元测试时,我使用的是一个简单的* .json文件,我正在编写一个简单的xhr.get或request.get调用,如代码所示。

然而,当我使用config选项" 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"]}

1 个答案:

答案 0 :(得分:0)

嗯,我有两个猜测:

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

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

    <小时/> 我想这是#1