2009-11-05 75 views
13

我需要做跨域Ajax請求 - 這是我的代碼訪問受限制的URI被拒絕「代碼:」 1012 - 跨域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 

我結帳以下鏈接太 -

Access to restricted URI denied code: 1012

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

我也嘗試過URL中的回調。 我已經看到所有鏈接在這個問題上的計算器stackoverflow ..但無法克服這個東西 任何人都可以請幫助,並告訴我如何克服! 感謝

+1

確實的URL看起來更重要的是什麼:它真的返回JSONP數據? – jitter 2009-11-05 16:18:43

+0

你是否控制你正在做Ajax請求的域/站點?它是用json響應還是jsonp響應來設置的? – Stobor 2009-12-20 00:51:33

+0

你有沒有在你的頁面中定義一個名爲'jsonp_callback'的JavaScript函數? – Stobor 2009-12-20 00:54:10

回答

30

你將無法做一個跨域POST請求在瀏覽器中。

如果您正在進行JSONP調用以訪問跨域URL,則可以使用JQuery的getJSON方法。這將允許您僅發出GET請求。如果您可以使用GET參數將您的登錄信息提交給redirectURL,您可以完成這項工作。

請注意,發佈到遠程登錄表單可能是瀏覽器不允許這樣的跨域請求的最好例子。您不希望看起來像您的銀行的頁面能夠真正爲您提供來自銀行網站的數據 - 這將會是一個非常有效的釣魚頁面。另一方面,如果你真的想要解決這個問題,你可以編寫一些服務器端代碼,在給定輸入參數的情況下,向redirectURL發送一個post請求並回復響應。

請告訴我,您並未撰寫網頁仿冒網頁。

+20

+1「請告訴我你不是寫一個釣魚頁。」 – Boldewyn 2009-12-17 10:13:41

+1

有趣的評論。但有時恰好是這樣,當你的客戶端的GoDaddy QSC(快速購物車)完成設置並且從公共登陸/在線頁面時,你必須這樣做,你的客戶端需要一些認證機制來知道註冊用戶是否有足夠的權限以便您可以向他/她展示託管在像[http://issue.com](http://issue.com)這樣的服務上的「訂閱者雜誌」的基於Flash訂閱版的動畫版,而不是舊版-styled-下載PDF按鈕。 ! – 2014-04-15 09:54:23

+1

這不再是真的;您可以向服務器發出POST請求,服務器可以通過適當的CORS標頭進行。 – oberhamsi 2014-07-04 08:52:33

0

「我需要做跨域Ajax請求」

你不能做到這一點, 除非:

  • 您使用的油脂猴子
  • 你是一個jsonp請求,這不是真的ajax
+0

並猜測是什麼。如果你看他的代碼,他做了一個jsonp請求 – jitter 2009-11-05 16:16:27

+0

所以,你可以請建議一種方式,我可以使用$ .ajax爲了訪問我的redirectURL – 2009-11-05 16:17:42

3

JSONP並不是真正的Ajax,它不使用XMLHttpRequest,而是使用動態script元素。 jQuery讓這個透明的,但JSONP仍然需要以下工作:

  1. HTTP GET而已,你不能使用POST小號
  2. 服務器需要通過包裝在調用callback您迴應,以支持它指定

檢查您請求的URL是否支持JSONP並將呼叫更改爲HTTP GET

8

一種方式來做到這一點是使用你的服務器作爲代理:

AJAX Request   -> Your server -> Server of interest 

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

如果你控制的遠程服務器上,也是如此,在最新的瀏覽器(IE8,FF3.5)可以克服交叉 - 地域障礙:

IE's XDomainRequest methodthe W3C's and Mozillas Origin-Header

總之,如果服務器發送回HTTP頭

Access-Control-Allow-Origin: * 

與AJAX響應,IE和Mozilla將接受它,即使該請求來自不同的域的莖。您可以通過用它們替換*來縮小允許的請求域。

0

像WAMP或Apache任何服務器上運行它...

它不給出了一個錯誤......

NS_ERROR_DOM_BAD_URI: Access to restricted URI 
相關問題