我遇到了这段代码的麻烦,我似乎无法让它工作。我收到此调用的典型错误是“无法加载资源:服务器响应状态为401(未授权)”。
$('#btnZendesk').click(function () {
$.ajax({
url: "https://flatlandsoftware.zendesk.com/api/v2/topics/22505987.json",
type: 'GET',
crossDomain: true,
xhrFields: {
withCredentials: true
},
cache: false,
dataType: 'jsonp',
processData: false,
data: 'get=login',
timeout: 2000,
username: "test@test.com",
password: "test",
success: function (data, textStatus, response) {
alert("success");
},
error: function (data, textStatus, response) {
alert(data);
}
});
答案 0 :(得分:6)
问题是您尝试访问的资源受基本身份验证保护。
您可以在jQuery回调中使用beforeSend
来添加带有身份验证详细信息的HTTP标头,例如:
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic XXXXXX");
}
或者你可以使用jQuery ajaxSetup
$.ajaxSetup({
headers: { 'Authorization': "Basic XXXXX" }
});
修改强>
指向上述功能的一些链接
编辑2
Authorization标头的构造如下:
"username:password"
,结果字符串使用 Base64 示例:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
答案 1 :(得分:0)
我也遇到了这个问题,并且由于客户端网络服务限制(JSONP,XDR,CORS = true),所有来自互联网的解决方案都失败了或者不适用
为此,我在我的页面中添加了一个iframe,它位于客户端的服务器中。因此,当我们将数据发布到iframe和iframe然后将其发布到网络服务时。因此,消除了跨域引用。
我们添加了双向来源检查,以确认只有授权页面向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);
}