我得到了意想不到的令牌:对于有效的JSON

时间:2014-05-21 13:39:04

标签: json dojo esri arcgis-js-api

我正在使用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);
    }
  }
);

我得到了:

  

未捕获的SyntaxError:意外的令牌:dublinbikes:2

1 个答案:

答案 0 :(得分:3)

根本问题是,您esri.request对您要求的内容以及服务器回馈的内容感到困惑。由于您在其他域(api.citybik.es)上从您运行代码的地方(无论您的主机是什么)发出请求,因此您需要使用以下任一项:

  • CORS
  • JS​​ONP
  • 代理

绕过浏览器的安全限制。关于这些问题的详细信息很多,我不会再进一步​​运。

您的代码配置了两种方法 - callbackParamName告诉esri.request使用JSONP,并且您还有一个代理集以防万一。 callbackParamName告诉它只使用JSONP,因此忽略代理。

正如我在上面的评论中所指出的那样,真正的问题是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变量。如果你改为v1 of the API,那就支持JSONP。请求

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

返回:

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

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