1

私たち DOJO に要件があります。単体テスト中、私は単純な *.json ファイルを使用しており、コードに示されているように単純な xhr.get または request.get 呼び出しを行っています。

ただし、dojo/request は、構成オプション「handleAs:'json'」を使用すると、受け取った json の解析に失敗します。

「roles.data.json」ファイルの内容は次のとおりです。

{roles:["Role - A", "Role - B", "Role - C", "Role - D", "Role - E"]}

動かない道場のコードはこちら

    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 を使用しているとき、何が欠けているのでしょうか? 必要な追加のインポートはありますか?

===============

Ok!エラーが見つかりました..これはばかげていますが、JSON は二重引用符で囲む必要があります....単一引用符は構文エラーを引き起こします。正しい JSON は次のようになります。

{"roles":["Role - A", "Role - B", "Role - C", "Role - D", "Role - E"]}
4

1 に答える 1

0

さて、私は2つの推測をしました:

  1. JSON の形式が正しくありません。技術的には、すべての JSON フィールド名と文字列は「二重引用符」で囲む必要があります。
  2. 適切なヘッダーを送信していませContent-Type: application/jsonん:

応答でデータを JSON としてエンコードすることに加えて、Apache の AddType などのサーバー構成を使用するか、サーバー側コードでヘッダーに追加して、Content-Type ヘッダーを application/json に設定します。


1位だったかな

于 2012-11-04T17:02:43.817 に答える