3

ExtJS で JSON ストアを使用し、ASP.net Web サービスからデータを取得しています。同じドメインで使用するとデータが正常に返されますが、クロスドメインではエラーが返されます。

XMLHTTPREQUEST Access-Control-Origin ヘッダーはオリジンで許可されていません

これが私のコードです:

var myStore = new Ext.data.JsonStore({
    // Load data at once
    autoLoad: true,

    // Override default http proxy settings
    proxy: new Ext.data.HttpProxy({
        // Call web service method using GET syntax
        type:'ajax',
        url: path+'SelectIncidentList',
        restful:true,

        // Ask for Json response
        headers: {'Content-type': 'application/json'},
        reader:    {
            type: 'json',
            root: 'd'
        },
    }),

    id: 'incidentid',

    // Fields declaration
    fields: ['incidentid','occured','headline','source','enteredby','bodyintro','webaddress','location1','location2','location3','location4','image','incidenttypeid','incidentsubtypeid']
});

* 編集 *

得られた回答に基づいて、JSONP を使用するようにコードを変更しました。しかし、私は別の問題に直面しています。ExtJS コードにこれらの変更を加えた場合:

var myStore = new Ext.data.JsonStore({
autoLoad: true,

// Override default http proxy settings
proxy: new Ext.data.proxy.JsonP({
    type:'jsonp',
    url: path+'SelectoccurList',
    headers: {'Content-type': 'application/json'},
    reader: {
        type: 'json',
        root: 'd'
    },
}),
id: 'occurid',

// Fields declaration
fields: ['occurid','occured','headline','source','enteredby','bodyintro','webaddress','location1','location2','location3','location4','image','occurtypeid','occursubtypeid']
});

次のエラーが発生しています。

<?xml version="1.0" encoding="utf-8"?>
**SelectOccurList:-1Resource interpreted as Script but transferred with MIME type      text/xml.
SelectOccurList:1SyntaxError: Unexpected token '<'**
<ArrayOfOccurData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<OccurData>
   <occurid>22</occurid>
   <occured>2012-05-26T04:33:53-04:00</occured>
   <headline>headline</headline>
   <source>content</source>
 <enteredby />
 <bodyintro>content</bodyintro>
<webaddress />
<location1>29 -156.364</location1>
<location2 />
<location3 />
<location4 />
<image>url of iamge</image>
<occurtypeid>0</occurtypeid>
<occursubtypeid>0</occursubtypeid>
</OccurData>
<OccurData>
 <occurid>23</occurid>
 <occured>2012-05-26T15:41:52-04:00</occured>
 <headline>headline</headline>
 <source>test content</source>
 <enteredby />
 <bodyintro>test content</bodyintro>
 <webaddress />
 <location1>27.75974 -82.67853</location1>
 <location2 />
 <location3 />
 <location4 />
  <image>url of image</image>
<occurtypeid />
<occursubtypeid />
 </OccurData>
<OccurData>
  <occurid>24</occurid>
  <occured>test</occured>
  <headline />
  <source />
  <enteredby />
  <bodyintro />
  <webaddress />
  <location1 />
  <location2 />
  <location3 />
  <location4 />
  <image />
  <occurtypeid>0</occurtypeid>
  <occursubtypeid>0</occursubtypeid>
 </OccurData>
<OccurData>
 <occurid>25</occurid>
 <occured>Testing</occured>
 <headline>Testing 28 05 </headline>
 <source>Dummy</source>
 <enteredby>XYZ</enteredby>
 <bodyintro>This occur is dummy</bodyintro>
 <webaddress>http://</webaddress>
 <location1>5cd41415-5c60-4cbd-a6f3-05330b368a41</location1>
 <location2 />
 <location3 />
 <location4 />
 <image />
 <occurtypeid>0</occurtypeid>
 <occursubtypeid>0</occursubtypeid>
4

2 に答える 2

4

これは、スクリプト タグ + コールバック関数を使用して、同じドメイン ブラウザーの制限を回避するJsonP プロキシを使用する場合とまったく同じです。リンクされたヘッダーのドキュメントでは、いくつかの基本的なサーバー実装を含むサンプル コードで完全に説明されています。

もう 1 つのオプションは、実際にサーバー上で呼び出しをプロキシすることです。つまり、Ajax プロキシがサーバーを呼び出し、サーバーがリモート サーバーを呼び出し、標準の JSON 応答をフォーマットしてクライアントに返します。クライアントからリモートサーバーに直接電話をかけることはできません。

于 2012-05-29T19:15:59.280 に答える
0

「access-control-」ヘッダーを設定するようにサーバーを構成できます。 https://developer.mozilla.org/en/http_access_control

于 2012-05-30T10:32:14.970 に答える