0

HTML および JavaScript Web ページで Restful WS を呼び出すときに問題が発生します。

これは私のコードです:

$.ajax({ 
               type: "GET",
               dataType: "script",
               crossDomain: true,
               url: "http://localhost:8013/publicationservice/lista",              
               complete: function (xhr) {
                   console.log(xhr);
                   console.log("======");

               },
            }); 

これがサービスを呼び出す方法です。readyState: 4、responseCode: 200、メッセージ: "success" を返します。しかし、私の Rest WS のメソッドは文字列を返します。問題は、「xhr」を印刷するとオブジェクトデータが取得されることです。しかし、responseText プロパティを出力すると、未定義と表示されます。しかし、Chrome コンソールと Firefox の Firebug の両方でデバッグすると、「ネットワーク」タブに、結果が文字列として返された応答が表示されます (これはたまたま JSONP で動作する JSON です。なぜ dataType json または jsonp を使用しないのですか? ? エラーが発生するためですが、データ型を Script に設定すると正常に動作します)。しかし、それが主な問題です。アプリケーションを完了するために必要な文字列の値を取得できません。$ajax 呼び出しで可能なすべてのパラメーターを試しましたが、成功しませんでした。誰かが私を助けることができれば、本当に感謝します。前もって感謝します。

4

2 に答える 2

0

dataTypescriptに設定すると、 jqueryは応答をjavascriptアプリケーションコードとして実行するように指示されますが、これはあなたの場合は正しくないと思います。

dataTypeをjsonに設定したときにエラーが発生する場合、これは多くの場合、応答がjson検証に失敗したことが原因です。一部のバリデーターは、厳密さが異なります。次に例を示します。

このコードは、一部のパーサーでjson検証に失敗します。

{
     key : "value"
}

代わりに、次のようにキーと値の両方を引用符で囲む必要があります。

{
     "key" : "value"
}
于 2013-02-08T20:28:11.817 に答える
0

同じオリジンのセキュリティ ポリシーを実行しているようです。Web サービスを同じホストからロードしているか別のホストからロードしているかに関係なく、スクリプトはロードされますが、他のデータ型は制限されています。詳しくはこちらをご覧ください:同一オリジン ポリシークロスオリジン リソース共有

これを解決する 1 つの方法は、CORS ヘッダーを追加して、jsonデータ型を使用してデータを取得できるようにすることですtext

スクリプトが から実行されると仮定すると、サーバーhttp://www.example.com上の Web サービスにlocalhost:8013ヘッダーが返されます。

Access-Control-Allow-Origin: http://www.example.com

これにより、最新のブラウザーが Web サービスのクロスオリジンにアクセスできるようになります。古いブラウザはこれを実装していないので、それに依存しないように注意してください。

Web サービスの出力を変更するアクセス権がある限り、以下の代替手段をお勧めします。

同一生成元の制限を克服するもう 1 つの方法は、適切なJSONP を返すように Web サービスを変更することです。これは、Web サービスの応答に変数の割り当てまたは関数呼び出しのいずれかを含めることを意味します。Web サービスが を返すことを意味すると仮定すると{ "status": "Green", "options": { "alpha": true, "bravo": null } }、次のいずれかを送信します。

window.var1 = { "status": "Green", "options": { "alpha": true, "bravo": null } }

また:

callbackFunction( { "status": "Green", "options": { "alpha": true, "bravo": null } }  )

後者の場合、コマンドcallbackFunction()を実行する前に定義する必要があります$.ajax。前者の場合、変数がグローバル名前空間を汚染することになります。

于 2013-02-08T20:37:10.147 に答える