Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨域jQuery ajax调用不起作用_Javascript_Jquery_Ajax_Cross Domain - Fatal编程技术网

Javascript 跨域jQuery ajax调用不起作用

Javascript 跨域jQuery ajax调用不起作用,javascript,jquery,ajax,cross-domain,Javascript,Jquery,Ajax,Cross Domain,我有这个代码的问题,我似乎无法让它工作。这次调用返回的典型错误是“加载资源失败:服务器响应状态为401(未授权)” 问题是您试图访问的资源受到基本身份验证的保护 您可以在jQuery回调中使用beforeSend,添加带有身份验证详细信息的HTTP头,例如: beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", "Basic XXXXXX"); } 或者,您可以使用jQueryajaxSetup $.aja

我有这个代码的问题,我似乎无法让它工作。这次调用返回的典型错误是“加载资源失败:服务器响应状态为401(未授权)”


问题是您试图访问的资源受到基本身份验证的保护

您可以在jQuery回调中使用
beforeSend
,添加带有身份验证详细信息的HTTP头,例如:

beforeSend: function (xhr) {
  xhr.setRequestHeader ("Authorization", "Basic XXXXXX"); 
}
或者,您可以使用jQuery
ajaxSetup

$.ajaxSetup({
  headers: { 'Authorization': "Basic XXXXX" }
});
编辑

指向上述功能的几个链接

编辑2

授权标头的构造如下所示:

  • 用户名和密码被加入一个字符串
    “Username:password”
    ,结果字符串使用Base64进行编码
例如:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

我也遇到了这个问题,不知何故,由于客户端Web服务的限制(JSONP、XDR、CORS=true),所有来自internet的解决方案要么失败,要么不适用

为此,我在页面中添加了一个iframe,它位于客户端中;s服务器。因此,当我们将数据发布到iframe时,iframe然后将其发布到web服务。因此,消除了跨域引用

我们添加了一个双向原点检查,以确认只有经过授权的页面才会向iframe发送数据和从iframe发送数据

希望能有帮助

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}

//将数据发送到iframe
var hiddenFrame=document.getElementById('receiver').contentWindow;
postMessage(JSON.stringify(message),'https://client-server-url');
//iframe使用以下代码接收数据:
window.onload=函数(){
var eventMethod=window.addEventListener?“addEventListener”:“attachEvent”;
var eventer=window[eventMethod];
var messageEvent=eventMethod==“attachEvent”?“onmessage”:“message”;
事件器(messageEvent,函数(e){
var origin=e.origin;
//如果原点不在预定义列表中,则中断并返回
var messageFromParent=JSON.parse(e.data);
var json=messageFromParent.data;
//使用AJAX将json发送到web服务
//将响应返回到源
e、 source.postMessage(JSON.stringify(aJAXResponse),e.origin);
},假);
}

同源策略不允许您进行跨域AJAX请求。资源受到基本身份验证的保护错误的密码和用户名?我尝试在浏览器中访问该json文件,它也表示该请求未经授权使用这些凭据。请检查您的凭据。@gronostaj如果实施了CORS,这是不正确的。感谢您的回复。我不确定在何处添加beforesend功能以及在何处输入密码。是xhr.setRequestHeader(“授权”,“基本myusername:mypassword”)?@Michael,我刚刚添加了如何生成基本身份验证的信息。你很接近。但不要在周围加空格:在最后一个字符串后面使用Base64。非常感谢您的帮助。不幸的是,现在我遇到了一个更深层次的问题,zendesk似乎不允许跨域AJAX请求。太遗憾了,我在报名前没有读过细则;)
<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}