0

問題が発生しました。専門知識をお役立てください。

企業向けのWebソリューションを開発しています。彼らは私に Web API メソッド (REST) を提供してくれました。この API は彼らのドメインにあります。私も自分のドメインからこれにアクセスしています。クライアントでさえ、すでに私のドメインをホワイトリストに登録しています。

以下を使用してこのメ​​ソッドを呼び出そうとしています。しかし、運がありません。以下のエラーが表示されます。

エラー NS_ERROR_DOM_BAD_URI: 制限付き URI へのアクセスが拒否されました

function GetCustomerInfo() { var Url = " http://webapi.company.com/vx.x/customer/get?format=xml&mobile=9876543210 " ; myXmlHttp = 新しい XMLHttpRequest(); myXmlHttp.withCredentials = true; myXmlHttp.onreadystatechange = ProcessRequest; myXmlHttp.open( "GET", Url, true,"UID","PWD"); myXmlHttp.send(); }

関数 ProcessRequest() {

if(this.readyState == this.DONE) 
{
        if(this.status == 200 && this.responseXML != null ) 
    {
        alert ("Received Resoponse from Server");
        }
    else
    {
        alert ("Some Problem");
    }
    }

}

firefox プラグインの RESTClient からこのメソッドにアクセスできます。以下のように、ブラウザのアドレスバーで資格情報を URL にコピーして、このメソッドにアクセスすることもできます。予想される応答 XML を取得します

http://UID:PWD@webapi.company.com/vx.x/customer/get?format=xml&mobile=9876543210

私が間違っているところを教えてください。おそらく、JSONP が役に立ちます。しかし、XMLHttpRequest を使用してこの API にアクセスできないのはなぜですか。

よろしくラジュル

4

1 に答える 1

0

ブラウザーの同一オリジン ポリシーでは、XMLHttpRequests を別のドメインに送信することはできません。Firefox プラグインまたはアドレス バーからアクセスできるのは、同じオリジン ポリシーが適用されていないためです。

そうです、JSONP で問題を解決できますが、サーバー側を制御できないために問題が発生する可能性があります。

あなたのコメントへの応答: JSONP を効果的に使用するには、サーバーは必要なデータを JSON 形式で返すだけでなく、リクエストが完了したときにコールバックを呼び出す JavaScript コードも返す必要があります。返されるデータを制御しないと、これに必要なコードを追加できません。ウィキペディアの記事は、一般的なケースの良い例を示しています。

私は CORS を使用したことがないため、CORS について多くの情報を提供することはできません。より良い解決策のように思えますが、ブラウザー間での互換性は信じられないほどではないと思います。また、私が理解しているように、追加の HTTP ヘッダーが必要なように見えるため、サーバーの制御も必要になります。

于 2013-05-17T10:39:46.640 に答える