【问题标题】:php cross-domain error - need to replace string?php跨域错误 - 需要替换字符串?
【发布时间】:2013-04-09 02:45:39
【问题描述】:

我正在使用 php 脚本将 json 数据从另一个域传递到我的 javascript 文件。我的代码适用于大多数响应。但是,在某些情况下,会有更长的值,其中的行被“\r\n\r\n”分隔,在这些情况下,当我尝试解析结果时会出现错误。我认为可能是“\r\n\r\n”导致了错误,并希望在将其传递给我的 javascript 之前,用我的 php 脚本中的空格替换该字符串,但我不确定如何 - 我我是新手。

php 脚本:

echo "var forecast='";
include('http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=' . $zipcode . '&format=json&key=[myKey]');
回声“';”;

javascript代码:

$(document).ready(function() {
$.get(url, 函数(数据) {
myData = JSON.parse(预测);
...等等。

我希望我可以在那个 php 脚本中使用 str_replace,但我知道我设置错了,因为它是在 url 本身中替换,而不是响应数据:

echo "var forecast='";
include(str_replace("\r\n"," ","http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=" . $zipcode . "&format=json&key=[myKey]"));
回声“';”;

我在正确的轨道上吗?

【问题讨论】:

  • include 用于从可信来源导入另一个 php 文件,例如您网站的硬盘;如果你想读取一个 url 的内容,试试 file_get_contents 或 php-curl。

标签: php cross-domain


【解决方案1】:

问题在于 include 只是简单地回显了对 url 的调用结果。尝试使用file_get_contents

echo "var forecast='";  
$res = file_get_contents("http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=" . $zipcode . "&format=json&key=[myKey]");
echo str_replace("\r\n",$res); 
echo "';";

【讨论】:

    【解决方案2】:

    您应该从不使用include 来获取外部网址以在您的应用中使用。您无法控制输出,因此您无法预测脚本的行为方式。


    也就是说,不要使用include,而是考虑使用curlfile_get_contents

    查看一个类似的问题,我看到该 API 支持 JSONP。这正是您想要的,而您根本无需构建服务器端中继。

    尝试在请求 URL 中添加 callback 参数。您可以从原始页面中的 javascript 代码中调用它,它会运行 callback 值指定的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多