繁体   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