1

xml応答を生成するWebサービスを実装しました。

jquery ajaxを介して呼び出しているときに、問題が発生しています。

同じコンテナ内に同じファイルを置くと、適切な応答が得られます。これは、クロスドメインポリシーが原因です。

jqueryajaxでクロスドメインポリシーを使用する方法を教えてください。

私はTomcatをWebサーバーとして使用しています。すべてのWebサービスはこのサーバーにデプロイされます。

以下はコードです。

function doajaxcall() 
{
$.ajax({
    url: "http://localhost:8080/mobile-services/rest/languages/",
    type: "GET",
    processdata: true,
    dataType: "json",
    contentType: "application/json;",
    beforeSend: function () { },
    headers : 
    {
        "Content-Type"  : "application/json",
        "Accept" : "application/json",
        "Access-Control-Allow-Origin":"http://192.168.0.1:8080/"
    },
    success: function (data) 
    {          
        alert('Data..'+data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        try 
        {
            alert(JSON.stringify(XMLHttpRequest) + "\n" + textStatus + "\n" + errorThrown);
        }
        catch (ex) { alert("Exception occured.. "); }
        finally { }
    }
});

}

ヘッダーの同じコンテナーからこのコードを実行すると、ヘッダーに「Access-Control-Allow-Origin」:「http://192.168.0.1:8080/」が表示されます。

コンテナの外で実行すると、取得します

"Access-Control-Allow-Origin":null

提案してください。

4

2 に答える 2

2

この問題を修正するには。cors-filter-1.3.1.jarをwebservices/web-inf/libに追加しました。ディレクトリ。

以下は、Tomcatのクロスドメインアクセスを有効にするためのweb.xmlファイル構成です。

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>

<filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

Spring3.0Webサービスの応答タイプをxmlからJSONに変更しました。次のコードスニペットを使用して、WebサービスからJSONデータを読み取ります。

$.getJSON('http://localhost:8080/mobile-services/rest/languages/',
function(data) 
{
    $("#lang_1").html(data.languages[0].language);
    $("#lang_2").html(data.languages[1].language);
    $("#lang_3").html(data.languages[2].language); 
});
于 2012-06-24T17:26:52.587 に答える
1

クロスドメインリクエストのdataTypeとしてJSONP(パディング付きのJSON)を使用します。

例えば:

(function($) {
var url = 'http://localhost:8080/mobile-services/rest/languages/test.json?callback=?';

  $.ajax({
   type: 'GET',
   url: url,
   async: false,
   jsonpCallback: 'jsonCallback',
   contentType: "application/json",
   dataType: 'jsonp',
   success: function(json) {

   //your code
    },
 error: function(e) {
   console.log(e.message);
 }
 });
 })(jQuery);
于 2012-06-22T12:51:32.437 に答える