我有这个 MooTools 代码:
new Request.JSON({
method: 'POST',
url: URL, /*URL TO ANOTHER DOMAIN*/
onSuccess: function(r){
callback(r);
}
}).post(data);
并且此代码不发送 POST 请求(仅限 OPTIONS)... 看看下面的代码(效果很好):
var http = null,
params = Object.toQueryString(data);
try {
http = new XMLHttpRequest();
} catch (e) {
try {
http = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
http = null;
alert("Your browser does not support AJAX!");
}
}
}
var url = URL;
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
var jsonData = JSON.parse(http.responseText); /*OR EVAL*/
callback(jsonData);
}
};
http.open("POST", url);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.send(params);
编辑:
尝试过:.setHeader('Content-Type','application/x-www-form-urlencoded');
还是没有……哪里有问题?
谢谢!
最佳答案
这是因为 MooTools 将一些额外的东西与请求 header 捆绑在一起。
例如。如果你的 htaccess 说:
Header set Access-Control-Allow-Origin: *
您需要这样设计您的请求:
var foo = new Request({
url: 'http://fragged.org/Epitome/example/data/',
method: 'get',
onComplete: function (data) {
// returns an object with name and surname
new Element('div[html="{name} {surname}"]'.substitute(JSON.decode(data))).inject(document.body);
}
});
// need to remove that or CORS will need to match it specifically
delete foo.headers['X-Requested-With'];
foo.send();
这就是为什么您只在飞行前看到 OPTIONS 的原因。它不喜欢你:)
您可以更改 .htaccess
以也匹配 X-Requested-With
,这可能是一些额外的“安全”。
参见 http://jsfiddle.net/7zUSu/1/对于一个工作示例 - 我不久前做过,当时我想将此更改更改为 Request https://github.com/mootools/mootools-core/issues/2381固定。
关于javascript - MooTools CORS 请求与 native Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445337/