【问题标题】:API works in the browser, not JSAPI 在浏览器中工作,而不是 JS
【发布时间】:2014-10-09 13:34:17
【问题描述】:

此 URL 在浏览器中输出 JSON

http://api.sfpark.org/sfpark/rest/availabilityservice?lat=37.7832776731&long=-122.405537559&radius=0.10&uom=mile&response=json

但是当我将它与下面的 Jquery 一起使用时,它似乎输出了这个错误

{"STATUS":"ERROR","MESSAGE":"Error while retrieving availability.  Search parameters are not valid. callback is not a valid request parameter. _ is not a valid request parameter.","RESPONSE_SENT_TS":"2014-08-15T12:16:01.455-07:00","REQUEST_RECD_TS":"2014-08-15T12:16:01.450-07:00"}

这是我正在使用的代码

var parkingUrl = "http://api.sfpark.org/sfpark/rest/availabilityservice?lat=37.7832776731&long=-122.405537559&radius=0.10&uom=mile&response=json";

$.ajax({
    url:parkingUrl,
    type:'GET',
    dataType:'JSONP',
    success: function(data){
        console.log(data);
    }
});

【问题讨论】:

  • 我更改了 dataType:'text' 并得到“请求的资源上没有 'Access-Control-Allow-Origin' 标头。”。 See this.
  • 在这里试试:jsbin.com/yoneresohefe/2/edit
  • 进入 yql 控制台,粘贴:'select * from json where url="your url" ',检查 json 选项卡,输入回调名称,然后使用底部的 url原产地。
  • @dandavis,谢谢 - 该解决方法对我有用

标签: javascript jquery ajax jsonp


【解决方案1】:

您正在使用 JSONP 调用网络服务。 jQuery 中的 JSONP 通过向 url 添加回调函数来工作,因此被调用的 url 变成了类似

http://api.sfpark.org/sfpark/rest/availabilityservice?lat=37.7832776731&long=-122.405537559&radius=0.10&uom=mile&response=json&callback=callbackfn

网络服务不支持此参数。您必须使用 type:json 并希望 web 服务支持 CORS。

【讨论】:

    【解决方案2】:

    您得到的错误是基于服务器端脚本的。

    可能服务器不支持JSONP,你可以试试:

    $.ajax({
        url:parkingUrl,
        type:'GET',
        success: function(data){
           console.log(JSON.parse(data));
        }
    });
    

    页面的 PHP 代码

    header('Access-Control-Allow-Origin: http://api.sfpark.org');
    

    如果这不起作用,您也可以尝试使用 PHP 或您正在使用的任何方法在服务器端提取页面信息

    $parkingURL = 'http://....';
    echo file_get_contents($parkingURL);
    

    【讨论】:

    • 对。然后它给了我XMLHttpRequest cannot load http://api.sfpark.org/sfpark/rest/availabilityservice?lat=37.7832776731&long=-122.405537559&radius=0.10&uom=mile&response=json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://run.jsbin.com' is therefore not allowed access.
    • Ajax 由于安全原因不能进行跨源请求,这个问题有助于解决stackoverflow.com/questions/17318426/… 我认为你必须在服务器上设置它并将它放在页面的标题中,上面编辑为在 PHP 中显示
    • 添加了另一个通过服务器端请求提取信息的选项。
    【解决方案3】:

    根据他们的 API 文档,他们确实支持 JSONP,你需要添加这个参数:

    &jsoncallback=callbackFunctionName

    到您的请求网址

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多