2012-07-05 237 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