访问受限制的URI被拒绝" 代码:"1012 - 跨域Ajax请求

13

我需要进行跨域Ajax请求 - 这是我的代码

 $.ajax(
        {
            url: redirectURL,
            data: $('#login-container form').serialize() + querystring,
            type: 'post',
            cache: false,
            dataType: 'jsonp',
            jsonp: 'jsonp_callback',
 });

Error: [Exception... "Access to restricted URI denied"  code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)"  location: "http://testsite/assets/scripts/jquery-1.3.2.js Line: 19"]
Source File: http://testsite/assets/scripts/jquery-1.3.2.js
Line: 19

我也查看了以下链接 -

访问受限的URI被拒绝代码:1012

 $.ajax(
        {
   url: redirectURL+'?callback=?',
            data: $('#login-container form').serialize() + querystring,
            type: 'post',
            cache: false,
            dataType: 'html' });

我也尝试过在url中使用回调函数。我已经看了Stack Overflow上关于这个问题的所有链接,但是还没有克服这个问题。有谁能帮忙告诉我如何解决吗?谢谢。


1
URL长什么样子很重要,更重要的是它是否真的返回JSONP数据? - jitter
你控制正在发起Ajax请求的域名/网站吗?它是否设置为JSON响应或JSONP响应? - Stobor
你的页面里有一个叫做 jsonp_callback 的 JavaScript 函数吗? - Stobor
6个回答

30

在浏览器中无法进行跨域POST请求。

如果您想要访问跨域URL并进行JSONP调用,可以使用jQuery的getJSON方法。这将只允许您进行GET请求。如果您可以使用GET参数向redirectURL提交登录信息,则可以使其正常工作。

需要注意的是,向远程登录表单进行POST请求可能是浏览器禁止此类跨域请求的最好例子。您不希望看起来像银行的页面实际上可以提供来自银行网站的数据 - 这将成为一个非常有效的网络钓鱼页面。

另一方面,如果您真的想绕过这个问题,可以编写一些服务器端代码,根据输入参数向redirectURL发出POST请求,并返回响应。

请告诉我您没有编写网络钓鱼页面。


1
有时候会发生这样的事情,即当您的客户的GoDaddy QSC(快速购物车)设置好了,并且从公共着陆/存在页面中,您的客户希望有一种身份验证机制来知道注册用户是否具有足够的特权,以便您可以向他/她展示基于Flash的订阅者专属杂志的动画版本,该版本托管在像http://ISSUE.com这样的服务上,而不是旧式的下载PDF按钮。!!! - Ronnie Depp
1
这不再是真的了;您可以通过适当的CORS头向允许此操作的服务器发出POST请求。 - oberhamsi

7

一种方法是使用您的服务器作为代理:

AJAX Request          -> Your server -> Server of interest

AJAX Response Handler <- Your server <- Server of interest 

3
JSONP并不是真正的Ajax,因为它不使用XMLHttpRequest,而是使用动态script元素。jQuery使其透明化,但是JSONP仍需要以下内容才能工作:
  1. 仅限HTTP GET请求,不能使用POST
  2. 服务器需要通过将响应封装在您指定的回调调用中来支持它
检查您请求的URL是否支持JSONP,并将调用更改为HTTP GET。

2
如果您也控制远程服务器,并且使用最新的浏览器(IE8、FF3.5),您可以克服跨域障碍:IE的XDomainRequest方法W3C和Mozilla的Origin-Header。简而言之,如果您的服务器返回HTTP头,则可以使跨域请求成功。
Access-Control-Allow-Origin: *

使用 AJAX 响应,即使请求来自不同的域,IE 和 Mozilla 也会接受它。您可以通过将 * 替换为允许请求的域名来缩小允许请求的范围。


0

在任何服务器上运行它,如WAMP或Apache...

它不会给出错误...

NS_ERROR_DOM_BAD_URI: Access to restricted URI 

0

"我需要进行跨域 Ajax 请求"

除非:

  • 你使用 grease monkey
  • 你正在进行一个实际上并不是 Ajax 的 jsonp 请求

猜猜看。如果你看他的代码,他会发起一个jsonp请求。 - jitter
那么,您能否建议一种方法,使我可以使用$.ajax来访问我的redirectURL? - Shaitender Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接