2

extjsストアを使用して、Jsonを返すJersey Rest Javaアプリケーション(tomcatで実行)と通信しようとしています。そして、Jsonを使用してグリッドコンポーネントに印刷しようとしています。これは私のストアコードです。

Ext.define('WSC.store.Users', {
extend: 'Ext.data.Store',
fields: ['period','tot_units', 'tot_selling_price'],
model: 'WSC.model.User',
proxy: {
    type: 'rest',
    url : 'http://localhost:8080/mondrianCube/services/query/querygoeshere/json',
    reader: {
        type: 'json',
        root: 'table'
    }
},
autoLoad: true

});

取得したjsonをストアが読み取ることができませんでした。推奨事項のほとんどは、応答ヘッダー(Access-Control-Allow-Origin)をwebapp(tomcatで実行)に追加することでした。そこで、以下のような応答ヘッダーを追加しました。

@Path("/query/{qryParam}/json")
@GET
@Produces(MediaType.APPLICATION_JSON)
public static Response jsonResult(@PathParam("qryParam") String qryParam) throws JSONException 
{
    executeQuery("select {[Measures].members} on columns, {Time.[2010], Time.[2010]} on rows from sales" );
    String json = (new JSONObject(((new ResultSetConvert(result)).toJson()))).toString();
    return Response.ok(json).header("Access-Control-Allow-Origin","*").build();     
}

それでも、以下と同じエラーが発生します

http://i.stack.imgur.com/X2cKd.png

ここで何が欠けていますか?

PS URLが同じドメイン内のファイルを指している場合、ストアはファイル内のjsonを読み取ることができます。

4

1 に答える 1

0

たとえば、これにはJSONPを使用することをお勧めします。

            Ext.get('search-form').on('submit', function(ev) {
                ev.preventDefault();
                Ext.ux.JSONP.request('http://api.flickr.com/services/feeds/photos_public.gne', {
                    callbackKey: 'jsoncallback',
                    params: {
                        format: 'json',
                        tags: Ext.fly('search-value').dom.value,
                        tagmode: 'all',
                        lang: 'en-us'                            
                    },
                    callback: updateResults
                });
                return false;
            });

ウィキペディアの定義によるjsonp

JSONPまたは「JSONwithpadding」は、基本のJSONデータ形式を補完するものです。これは、異なるドメインのサーバーからデータを要求する方法を提供します。これは、同一生成元ポリシーのために通常のWebブラウザーでは禁止されています。

定義による同一生成元ポリシー

コンピューティングでは、同一生成元ポリシーは、JavaScriptなどの多くのブラウザー側プログラミング言語にとって重要なセキュリティ概念です。このポリシーでは、同じサイトから発信されたページで実行されているスクリプトが、特定の制限なしに互いのメソッドとプロパティにアクセスすることを許可していますが、異なるサイトのページ間でほとんどのメソッドとプロパティにアクセスすることはできません。[

于 2012-08-24T12:19:55.227 に答える