Javascript 不使用jQuery发送跨域ajax请求
我有以下代码:Javascript 不使用jQuery发送跨域ajax请求,javascript,ajax,node.js,cross-domain,Javascript,Ajax,Node.js,Cross Domain,我有以下代码: function ajax(callback, requestString){ console.log("basic ajax sending"); var xmlhttp; // compatible with IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){
function ajax(callback, requestString){
console.log("basic ajax sending");
var xmlhttp;
// compatible with IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText); //we got a response
}
}
xmlhttp.open("GET", requestString, true);
xmlhttp.send();
}
//Here: code to be able to use that function repeatedly.
如果在node.js服务器的域上使用它,效果会很好,问题是我正在开发一个API,请求必须跨域发送。这些请求(requestString)只是一个字符串,其格式类似于:“+”&b=b”,如果这很重要的话。我得到以下错误:XMLHttpRequest无法加载。跨源请求仅支持协议方案:http、数据、chrome、chrome扩展、https、chrome扩展资源。我确实看到了jQuery和jsonP的解决方案,但我不想把jQuery推给我的客户,所以我必须找到一个好的解决方案。。。
谢谢你抽出时间 但是jsonP可以在没有jQuery的情况下工作。例如:
var CallbackRegistry = {};
function scriptRequest(url, onSuccess, onError) {
var scriptOk = false;
// generating JSONP function name
var callbackName = 'cb' + String(Math.random()).slice(-6);
// add name in url
url += ~url.indexOf('?') ? '&' : '?';
url += 'callback=CallbackRegistry.' + callbackName;
CallbackRegistry[callbackName] = function (data) {
scriptOk = true;
delete CallbackRegistry[callbackName];
onSuccess(data);
};
function checkCallback() {
if (scriptOk) return;
delete CallbackRegistry[callbackName];
onError(url);
}
var script = document.createElement('script');
// for IE
script.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
this.onreadystatechange = null;
setTimeout(checkCallback, 0);
}
}
script.onload = script.onerror = checkCallback;
script.src = url;
document.head.appendChild(script);
}
现在,您可以通过跨域呼叫获得响应
function afterSuccess(data) {
alert('Success' + data);
}
function afterError(data) {
alert('Error' + data);
}
scriptRequest(url, afterSuccess, afterError);
在服务器端,您可以将端点的访问控制允许原点更改为
访问控制允许原点:
,…注意,这将匹配任何内容。根据您的服务器框架,肯定有一种方法将某些URL列入白名单以访问您的端点。希望有帮助