簡體   English   中英

jQuery使用$ .ajax()訪問遠程站點

[英]JQuery accessing remote site with $.ajax()

我將其分解為絕對不起作用的最簡單的代碼。 我在Web服務上做了一個簡單的Echo測試,它將字符串作為參數並將其回顯。 我寫了我一直在努力的javascript代碼,以便在這里訪問此方法:

http://jsfiddle.net/stephenbayer/CaHqY/9/

我真的需要知道,為什么我會收到錯誤消息,為什么我收到的唯一消息是來自javascript的錯誤字符串“ Error”。 如何解決此問題並使其正常工作。

這是一個通過WCF使用標准SOAP運行的Web服務,並且我們有一個客戶端請求通過javascript訪問。 對我來說聽起來很瘋狂,但我認為這不會那么困難。 我根本找不到任何有關如何使這些跨域調用正常工作的明確信息。

由於具有相同的起源策略,您無法通過普通AJAX進行跨域調用,因此您需要執行JSONP -Call。

也許您可以使用CORS,但需要小心,因為那樣的話,您可能會容易受到跨站點腳本的攻擊。

現代瀏覽器會阻止跨域請求,以保護用戶免受XSS攻擊。

要處理來自另一個域的數據,您需要以下四種解決方案之一:

  • xml服務器端的已修改標頭
  • jsonp請求和響應
  • 代理,以便您的瀏覽器認為兩個域都相同
  • 瀏覽器中的寬松保護(並非所有瀏覽器都可能)

請注意,前兩個解決方案涉及更改XML服務器。

其他人是對的。 您必須使用JSONP而不是JSON。

但是還有一種選擇:

與其直接將ajax與其他域一起使用,不如將其與您自己的域一起使用,在服務器中創建新的Web服務,例如使用php。

然后,在您的php ws中,您可以調用外部Web服務,它將起作用。 使用file_get_contents()

我使用它通過公共服務器獲取地址代碼:

$remote_data = @file_get_contents('http://republicavirtual.com.br/web_cep.php?formato=json&cep='.urlencode($_REQUEST['cep']));

echo $remote_data;

由於相同的原始策略,您的瀏覽器正在停止請求。 您只能對加載javascript的域進行xhr(即ajax)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM