2012-07-05 219 views
0

我打破了這下到是行不通的絕對簡單的代碼遠程站點。我在我的web服務上做了一個簡單的Echo測試,它將一個字符串作爲參數並將其回顯。我寫的,我一直在努力,以訪問該方法在這裏的JavaScript代碼:

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

我真的需要知道,爲什麼我收到一個錯誤,爲什麼我是唯一的消息回來是javascript的錯誤字符串「錯誤」。我該如何解決這個問題並使其工作。

這是已通過WCF使用標準的SOAP運行一個Web服務,我們有這樣的要求通過JavaScript訪問的客戶端。聽起來很瘋狂,但我不認爲這會很困難。我找不到任何關於如何讓這些跨域電話正常工作的明確信息。

回答

2

通過正常的AJAX由於同源策略不能做跨域調用,你需要爲做JSONP - 呼叫。

也許你可以使用CORS,但你必須要小心,因爲這樣或許你還會很容易受到跨站點腳本。

1

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

要處理的數據從另一個域來了,你需要這4個解決方案之一:

  • modified headers上的XML服務器端
  • jsonp請求和響應
  • 一個代理,這樣瀏覽器認爲這兩個域是相同的
  • 在瀏覽器中放鬆保護(不可能在所有這些)

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

1

其他是正確的。 您必須使用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; 
+0

正試圖訪問Web服務客戶端指出,他們沒有PHP或向他們提供任何服務器端處理。這聽起來很奇怪,但他們表示它必須是一個純JavaScript解決方案。此服務正在生產中,並且正在爲標準SOAP調用工作,我不想爲其他人正在使用的用於處理客戶端使用JavaScript的一次性情況的SOAP中斷功能。試圖幫助一個客戶而不會爲其他客戶破壞一直是一個難題。 – stephenbayer 2012-07-05 15:44:34

+0

他們是否使用java腳本來創建移動應用程序,如phoneGap?這是非常複雜的,然後......現在每個開發這樣的級別的人都應該至少有一個免費的小型php/mysql測試服務器。 – PSyLoCKe 2012-07-05 17:47:33

+0

@stephenbayer聽起來像CORS可能是你的正確選擇。 – Christoph 2012-07-06 07:17:05