我有一些本地的html / js文件,我想通过https调用一些远程服务器,并最终使用基本身份验证来处理请求。
我遇到两个问题。首先,如果我没有为dataType指定'jsonp',jQuery.ajax()请求将返回错误:
访问受限制的URI拒绝代码: 1012
我的请求是否被视为跨域,因为我的主要工作文件存储在本地,但是从其他地方的服务器检索数据?
很好,我更新了呼叫,现在它看起来像:
$.ajax({
url: myServerUrl,
type: "GET",
dataType: "jsonp", // considered a cross domain Ajax request if not specified
username: myUsername,
password: myPassword,
success: function(result)
{
// success handling
},
error: function(req, status, errThrown){
// error handling
}
})
因为我需要使用基本身份验证,所以我传入用户名/密码但是如果我监视请求,我看不到它被设置,另外,服务器发送错误响应,因为它没有预期的信息。
此外,由于我设置了jsonp
,因此不会调用beforeSend
。
如何使用基本身份验证为此请求传递凭据?
答案 0 :(得分:12)
短版本是你不能这样做的。您的怀疑是正确的,因为您是本地的,这些文件是远程的,您无法访问它们,您被same-origin policy阻止。解决方法是JSONP,但这似乎并不适用于您的情况......
JSONP的工作方式不同,它是通过<script>
标记包含获取文件的GET请求,因此您不会发送特殊标题或任何内容。
您需要通过您所在的服务器(运行此脚本的域)或其他代理选项代理请求,但主要出于安全原因,阻止从客户端到另一个域。 / p>
答案 1 :(得分:7)
尝试http://user:password@restservice。这模仿了一个基本身份验证请求。
答案 2 :(得分:0)
我认为你必须添加某种服务器代理。 JSONP只是使用脚本标记的一种特殊方式。因此,它不允许设置任意标头。当然,你不能做一个跨学科的XHR。