我使用纯JavaScript在另一个域(跨域)中进行ajax调用。
所以我需要指定 dataType 。但我不知道,在哪指定?。
我使用以下内容使用javascript进行ajax调用:
var xmlhttp = new XMLHttpRequest();
var url = 'www.mydomain.com/path/to/reach';
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
console.log('Log : ' + url + ' || Updated.');
}
else if (xmlhttp.status == 400) {
alert('There was an error 400');
}
else {
alert('something else other than 200 was returned');
}
}
};
url = url + '?callback=my_callback_method';
xmlhttp.open("GET", url, true);
xmlhttp.send();
我也进行虚拟回调,
function my_callback_method(res){
//
}
但是,它不会起作用。我收到错误原因:CORS标题'Access-Control-Allow-Origin'缺失。
我的代码出了什么问题?
有可能吗?
任何解决方案?
(我只需要JavaScript解决方案!)
答案 0 :(得分:2)
我终于偶然发现了这个链接"A CORS POST request works from plain javascript, but why not with jQuery?",它指出jQuery添加了
Access-Control-Request-Headers: x-requested-with
所有CORS请求的标头。 jQuery 1.5.2没有这样做。另外,根据同样的问题,设置服务器响应头
Access-Control-Allow-Headers: *
不允许继续响应。您需要确保响应标头具体包含所需的标头。即:
Access-Control-Allow-Headers: x-requested-with
答案 1 :(得分:2)
我得到错误原因:CORS标题'Access-Control-Allow-Origin' 丢失。
这是因为您使用XMLHttpRequest
并且XMLHttpRequest
的使用需要CORS。 JSONP
技术并未涉及XMLHttpRequest
的使用。 JSONP中的技巧是创建一个script
标记并让浏览器加载该脚本:
var script = document.createElement('script');
script.src = '//domain.com/path/to/jsonp?callback=my_callback_method'
document.getElementsByTagName('head')[0].appendChild(script);
此外,您需要创建一个全局函数,在您的情况下为my_callback_method
,并从jsonp脚本中调用它。
当然,您的服务器端应该具有以下实现:当获得对//domain.com/path/to/jsonp
的请求时,它应该返回一个js文档,其中调用callback=my_callback_method
中指定的全局函数:
my_callback_method()