跨域GET JSON编码的字符串?

时间:2012-11-04 23:42:26

标签: php javascript jquery

我有一个应用程序,我用Javascript编写,用于Phonegap,它从我服务器上的PHP脚本中检索JSON编码的字符串。

当它是跨域请求时,是否可以从Javascript中的PHP中检索此JSON编码字符串?

我目前使用的是雅虎的YQL,它通过jQuery AJAX检索字符串,但我不想依赖雅虎的服务,特别是因为它在正常运行时间方面非常好看。

2 个答案:

答案 0 :(得分:3)

对于跨域GET,如果您拥有端点,我建议您修改它以使用JSONP

由于浏览器<script>标记可以从不同的域加载脚本,因此它是解决跨域问题的一种方法,而不用担心跨浏览器支持。它确实会产生一些潜在的跨站点脚本问题(我建议阅读上面链接的维基页面),你应该知道。

如果您使用jQuery,使JSONP API调用变得非常简单,但通过自动动态注入<script>标记,将src属性设置为您的API端点,并创建一个调用成功后调用的回调函数。

修改服务器端点以获取callback参数。用回调包装你的json响应。

e.g。 (不是真正的代码)

//example api url
//http://tempuri/apiendpoint?callback=foo 

//example url handler (not in PHP)
app.get('/apiendpoint',function() {
  return query.callback + '({"json": "value"});'
});

如果您不支持JSONP,则可以启用跨源资源共享(CORS)。 iOS和Android网络浏览器都支持它。为了添加对CORS的支持,您需要修改端点以发送相应的标头:

'Access-Control-Allow-Origin'
'Access-Control-Allow-Methods'
'Access-Control-Allow-Headers'

答案 1 :(得分:0)

有一个名为ACD(AJAX Cross Domain)的Perl脚本,我过去使用过非常成功 - 请查看here。最好的部分是您不必依赖外部服务。

它的工作原理如下:

<script type="text/javascript" src="http://my-domain.com/cgi-bin/ACD/ACD.js?uri=(http://www.google.com)"></script>
<script type="text/javascript">
 alert(ACD.responseText); //Should alert the source of google.com
</script>