4

重複の可能性:
jquery.ajax() を使用したクロスオリジン 'Authorization'-header

JQuery

http://code.jquery.com/jquery-1.7.2.min.jsを使用してい ます

入力すると -> http://pol638_047fe0/JSON.HTML?FN=GetPages&PIN=7659ブラウザで、jsonコンテンツを含むファイルを受け取ります

Javascript

var url = 'http://pol638_047fe0/JSON.HTML';

$.ajax({
url:      url,
type:     'GET',
dataType: 'json',
username: 'ADMIN',
password: '1234',
data: {
    'FN':  'GetPages',
    'PIN': '7659' 
},
xhrFields: {
    withCredentials: true
},
sucess: function(data) {
    alert('done');
    console.log('data', data);
}
});

Chrome デベロッパー ツール

コンソール出力: Origin null エラー

XMLHttpRequest cannot load http://pol638_047fe0/JSON.HTML?FN=GetPages&PIN=7659. Origin null is not allowed by Access-Control-Allow-Origin.

サーバーは、誰が正しいユーザー名とパスワードでデータにアクセスするかを気にするべきではないため、これは私にはあまり気になりません。

ネットワーク ヘッダー:

Request URL:http://pol638_047fe0/JSON.HTML?FN=GetPages&PIN=7659
Request Headersview source
Accept: '*/*'
Cache-Control: max-age=0
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko)       Chrome/23.0.1271.64 Safari/537.11
Query String Parametersview URL encoded
FN: GetPages
PIN: 7659

Ok。ここで何かが間違いなくうまくいかなかった..

奇妙なことに、この ajax 呼び出しをコードに追加すると、次のようになります。

...
$.ajax({
url : url,
data: {
    'FN'    : 'GetPages',
    'PIN'   : '7659' 
}
});

ネットワークの下に別の JSON.HTML ファイルを受け取り、正しい応答が返されます。

Request URL: http://pol638_047fe0/JSON.HTML?FN=GetPages&PIN=7659
Request Method: GET
Status Code: 200 OK
Request Headersview source
Accept: application/json, text/javascript, '*/*'; q=0.01
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Authorization: Basic QURNSU46U0JUQWRtaW4h
Cache-Control: max-age=0
Connection: keep-alive
Host: pol638_047fe0
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko)     Chrome/23.0.1271.64 Safari/537.11
Query String Parametersview URL encoded
FN: GetPages
PIN: 7659
Response Headersview source
Connection: close
Content-Type: application/octet-stream
Server: Keil-EWEB/2.1

応答:

[{"pg":0,"descr":"PC1"},{"pg":1,"descr":"PC2"},{"pg":2,"descr":"PC3"},{"pg":3,"descr":"HG1"},{"pg":4,"descr":"HG2"},{"pg":5,"descr":"HG3"},{"pg":6,"descr":"HG4"},{"pg":7,"descr":"DW1"},{"pg":8,"descr":"DW2"},{"pg":9,"descr":"CMN"}]

私はアイデアを使い果たしました。助けや提案に感謝します!

選抜

タイプをjsonpに変更すると、応答を受け取るのに役立ちますが、 Uncaught SyntaxError: Unexpected token ILLEGAL Error が発生するため、あまり役に立ちません。これは、応答が jsonp 形式ではないためだと思います。json 応答を取得する方法はありますか?

サーバーのアクセス ヘッダーを変更します。私にはそれをする権利がありません。

4

1 に答える 1

0

この記事を読むことをお勧めします: http://www.codeproject.com/Articles/42641/JSON-to-JSONP-Bypass-Same-Origin-Policy

XMLHttpRequest (ajax リクエスト) では、クロスドメイン呼び出しを行うことはできません。これは、ブラウザ自体によって設定された制限です。ただし、Web サービス (ま​​たは Web API) が同じドメイン (Web サイトと同じ) で実行されている場合は、完全に機能します。Same_origin_policy を調べる

于 2012-11-21T17:49:20.323 に答える