3

私のソリューションには、2 つの asp.net MVC プロジェクトが含まれています。1 つは Web サービス、もう 1 つは通常の Web サイトで、前述の Web サービスからデータを取得します。

Web サービスのホーム コントローラーに次のメソッドがあります。

...
public JSONResult GetTeacher(){
   return JSON(new {TeacherName = this.teacher.name });
}

この $.ajax メソッドを使用して、他の Web アプリケーション (Web サイトになる) からこのメソッドにアクセスしようとしています。

$.ajax({
    type: 'GET',
    url: 'localhost:11370/Home/GetTeacher',
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        alert(JSON.stringify(response));
        $('#results').html('Welcome, ' + response.Name);
    },
    error: function (error) {
        alert(JSON.stringify(error));
    }
});

ソリューションのデバッグを開始すると、2 つの Web 開発サーバーが両方とも異なるポートで開かれます。その結果、$.ajax 呼び出しが発生すると、次の情報がポップアップ表示されます。

the page at localhost:11510 says:
"readystate":0, "responsetext": "" , "status":0, "statustext":"error"

Google Chrome コンソールでスクリプトを直接実行しようとすると、次のメッセージが表示されます。

XMLHttpRequest cannot load http://localhost:11370/Home/GetTeacher. 
Origin http://localhost:11510 is not allowed by Access-Control-Allow-Origin.

$.ajax を使用してメソッドに実際にアクセスする方法についてのヘルプをいただければ幸いです。

編集:Webサービスを呼び出すとどうなるかを確認するために、単純なhtmlファイルも作成してみました。同じ結果です。また、メソッドに URL を入力するだけで、正常に機能し、教師の名前が表示されます。

4

1 に答える 1

3

ブラウザに組み込まれているため、same origin policy restrictionクロスドメイン AJAX リクエストを送信できません。考えられる回避策の 1 つは を使用することCORSですが、まだすべてのブラウザでサポートされているわけではないため、クロス ブラウザ ソリューションが必要な場合は、JSONP.

別のドメインからコントローラー アクションを使用する方法を説明するために、this custom JsonpResult私が書いた記事を参照してください。jQuery の JSONP 実装は GET 要求でのみ機能することに注意してください。コントローラ アクションのクロス ドメインに POST することはできません。これを行う必要がある場合、これを達成するための唯一の信頼できる方法は、2 つのドメイン間のブリッジとして機能するサーバー側スクリプトをホーム ドメインに記述することです。次に、AJAX 要求をこの新しいスクリプトに送信します。この新しいスクリプトは、要求をリモート ドメインに委任し、結果を返します。

于 2012-11-25T15:44:52.193 に答える