从昨天起,这就是我。我已经阅读了关于这个主题的多个主题,没有任何喜悦。我现在正在对这篇文章感到失望..
所以我正在使用(或尝试使用) skyscanner API - http://partners.api.skyscanner.net/apiservices/pricing/v1.0,如here所述。但是我遇到了旧敌人的错误:
XMLHttpRequest无法加载http://partners.api.skyscanner.net/apiservices/pricing/v1.0。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。响应的HTTP状态代码为405。
jQuery代码
var createCORSRequest = function(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// Most browsers.
xhr.open(method, url, true);
console.log( "success" );
} else if (typeof XDomainRequest != "undefined") {
// IE8 & IE9
xhr = new XDomainRequest();
xhr.open(method, url);
console.log( "XDomainRequest undefined" );
} else {
// CORS not supported.
xhr = null;
console.log( "CORS not supported" );
}
return xhr;
};
var postData = function(method, url, callback) {
var xhr = createCORSRequest(method, url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Accept', 'application/json');
var form = new FormData();
form.append('apiKey', 'MY API KEY HERE');
xhr.send(form);
xhr.onload = function() {
var responseText = JSON.parse(xhr.responseText);
callback(responseText);
};
xhr.onerror = function() {
console.log('There was an error!');
};
if (!xhr) {
throw new Error('CORS not supported');
}
};
postData('POST', 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0', callbackFunc);
你会看到我在使用WAMP的localhost上这样做但是我也尝试了一个实时版本,它出现了同样的错误和看似相同的问题。我已经尝试了几乎所有变量组合,以便在没有快乐的情况下纠正错误。我确信我正在按照关于正确创建会话的指示(here),但我错过了单独发现此会话的能力。
我现在知道(感谢@Rory McCrossan)这个API不支持CORS请求所以我正在改变机智以在PHP中执行服务器端的任务。我不确定我是否应继续在这里发帖或开始一个新问题,不幸的是,这也没有证明是直截了当的。我仍在尝试将相同的标题传递给相同的网址,但现在正反对:
HTTP请求失败! HTTP / 1.1 500内部服务器错误
因为我的服务器上没有CURL - 感谢tutorial site on PHP http requests我把它放在一起:
$url = 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0';
// Create map with request parameters
$params = array('apiKey' => 'MY API KEY');
// Build Http query using params
$query = http_build_query($params);
$contextData = array (
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded'.
'Accept: application/xml',
'content'=> $query );
// Create context resource for our request
$context = stream_context_create (array ( 'http' => $contextData ));
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { echo 'error'; }
var_dump($result);
正如我所说,我收到500内部错误 - 任何人都可以建议它现在是什么......?这感觉好像要跳过很多箍!