3

我正在使用 ArcGIS、Esri 请求并且我正在尝试从网络服务器获取数据,但每次我得到相同的“意外令牌:”错误,即使我的响应是正确的。

提前致谢。

这是我的代码:

require(["dojo/dom", "dojo/on", "dojo/dom-class", "dojo/_base/json",  "esri/urlUtils", "esri/config", "esri/request", "dojo/domReady!"], function(dom, on, domClass, dojoJson, urlUtils, esriConfig, esriRequest) {

    // fallback to proxy for non-CORS capable browsers
    // esri.config.defaults.io.proxyUrl  =  "/arcgisserver/apis/javascript/proxy/proxy.ashx";
    esriConfig.defaults.io.proxyUrl = "/proxy/proxy.ashx";

    dom.byId("url").value = "http://api.citybik.es/v2/networks/dublinbikes";
    dom.byId("content").value = "";

    //handle the Go button's click event
    on(dom.byId("submitRequest"), "click", getContent);

    function getContent(){

      var contentDiv = dom.byId("content");
      contentDiv.value = "";
      domClass.remove(contentDiv, "failure");
      dom.byId("status").innerHTML = "Downloading...";

     //  //get the url 
     // var url = urlUtils.urlToObject(dom.byId("url").value);

     //  console.log("EL URL path",url.path)
     //  console.log("EL URL query",url.query)
     //  var requestHandle = esriRequest({
     //    "url": url.path,
     //    "content": url.query
     //  });
     //  requestHandle.then(requestSucceeded, requestFailed);

      function requestSucceeded(data) {
        console.log(data);
      }

      function requestFailed(error) {
        console.log("Error: ", error.message);
      }

      var request = esriRequest({
        url: "http://api.citybik.es/v2/networks/dublinbikes",
        content: {
          format:  "json"
        },
        handleAs: "json",
        callbackParamName: "retrive"
      });
      request.then(requestSucceeded, requestFailed);
    }
  }
);

我越来越:

未捕获的语法错误:意外的令牌:dublinbikes:2

4

1 回答 1

2

根本问题是您对esri.request自己的要求以及服务器回馈的内容感到有些困惑。因为您在与运行代码的位置不同的域 ( ) 上发出请求api.citybik.es(无论您的主机是什么),您需要使用以下任一:

  • CORS
  • JSONP
  • 代理

绕过浏览器的安全限制。有很多关于这些的细节,我不会进一步运球。

您的代码配置了两种方法 -callbackParamName告诉esri.request使用 JSONP,并且您还设置了代理以防万一。告诉它只使用callbackParamNameJSONP,所以代理被忽略。

现在真正的问题,正如我在上面的评论中指出的那样,CityBikes API的 v2实际上似乎不支持 JSONP,因此您的回调参数被忽略,服务器直接返回 JSON。esri.request期待 JSONP,瞧 - 意外令牌:。请求

http://api.citybik.es/v2/networks/dublinbikes?callback=stackoverflow

返回:

{
network: {
company: "JCDecaux",
href: "/v2/networks/dublinbikes",
....

看?没有提到我们的stackoverflow变量。如果您改为查看API 的 v1,它确实支持 JSONP。请求

http://api.citybik.es/dublinbikes.json?callback=stackoverflow

返回:

stackoverflow(
[
{
bikes: 1,
name: "Fenian Street",
idx: 0,
....

...还有我们的stackoverflow变量。或者您可以callbackParamName从您的中删除esriRequest,并查看您的代理是否会处理来自 v2 地址的 JSON。

于 2014-05-22T01:00:03.937 回答