Prototype/AJAX を使用して Web サービスにアクセスしようとしましたが、エラーが発生してわかりません: サーバーにリクエストを送信すると、リクエストが GET リクエストではなく OPTIONS として解釈されるようです (サーバーはGETリクエストのみを許可するため、私が理解していることに基づいて、501 -実装されていないエラーがスローされますAccess-Control-Request-Method:
)。このエラーの原因となっている可能性のある AJAX/リクエストの定式化に欠けているものはありますか? ここでCORS /プリフライトリクエストを少し読みましたが、コードが準拠しているように見える場合にどのように適用できるかわかりません...
関連する AJAX リクエストは次のとおりです。
function fetchMetar() {
var station_id = $("station_input").value;
new Ajax.Request(REQUEST_ADDRESS, {
method: "get",
parameters: {stationString: station_id},
onSuccess: displayMetar,
onFailure: function() {
$("errors").update("an error occurred");
}
});
}
Chromeから取得したエラーと関連するリクエスト情報は次のとおりです。
Request URL:http://weather.aero/dataserver_current/httpparam?
dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3
&mostRecent=true&stationString=&stationString=KSBA
Request Method:OPTIONS
Status Code:501 Not Implemented
Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-prototype-version, x-requested-with, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:weather.aero
Origin:http://domain.com
Referer:http://domain.com/.../...html
ここで何を見落とすことができますか?リクエストが GET ではなく OPTIONS として送信されていると Chrome が言うのはなぜですか? Chromeが情報を吐き出すときAccess-Control-Request-Headers:
、これらはリクエストで許可されている唯一のヘッダーですか?
ありがとう!