MooTools CORS请求与原生JavaScript
MooTools CORS请求与原生JavaScript
我有这段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("您的浏览器不支持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 CORS请求与原生JavaScript之间的区别
在使用MooTools进行CORS请求时,可能会遇到一些问题。这是因为MooTools会将一些额外的内容捆绑到请求头中。例如,如果你的htaccess文件中包含以下内容:
Header set Access-Control-Allow-Origin: *
那么你需要按照以下方式创建你的请求:
var foo = new Request({ url: 'http://fragged.org/Epitome/example/data/', method: 'get', onComplete: function (data) { // 返回一个包含姓名和姓氏的对象 new Element('div[html="{name} {surname}"]'.substitute(JSON.decode(data))).inject(document.body); } }); // 需要移除该行代码,否则CORS请求将需要与之匹配 delete foo.headers['X-Requested-With']; foo.send();
这就是为什么你只看到了OPTIONS预检请求。它不喜欢你 🙂
你可以修改.htaccess文件,让它也匹配X-Requested-With,这可能是一种额外的“安全”措施。
你可以查看http://jsfiddle.net/7zUSu/1/中的一个示例,我在一段时间前遇到了这个问题,当时我想修复这个Request问题。
非常好的答案!谢谢。
我不知道该如何感谢你,这可能为我节省了数小时的抓狂时间。
MooTools CORS请求与原生JavaScript之间的差异
MooTools是一个流行的JavaScript库,用于简化Web开发中的一些常见任务。在使用MooTools进行CORS(跨域资源共享)请求时,与使用原生JavaScript相比,可能会出现一些差异。
问题的出现原因
在MooTools和原生JavaScript的例子中,两者都发送了POST请求,唯一的区别在于Accept请求头。MooTools发送的是Accept: application/json
,而原生JavaScript发送的是Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
。这可能会影响服务器的响应。
解决方法
要解决这个问题,我们可以通过修改原生JavaScript代码来将Accept请求头设置为application/json
,以使其与MooTools的请求一致。这样服务器就会按照相同的方式响应请求。
以下是修改后的原生JavaScript代码示例:
var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://example.com/api', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.setRequestHeader('Accept', 'application/json'); xhr.send(JSON.stringify(data));
通过将Accept请求头设置为application/json
,我们确保服务器按照预期的方式进行响应。
总结
MooTools和原生JavaScript在CORS请求中的差异可能会导致服务器响应的不同。解决这个问题的方法是通过修改原生JavaScript代码,将Accept请求头设置为与MooTools请求一致的值。这样可以确保服务器以相同的方式对待这些请求,从而解决任何由差异引起的问题。