2014-05-21 14 views
3

我在ArcGIS,ESRI的要求工作,我想從一個網絡服務器上的數據,但每次我得到了同樣的「意外的標記:」錯誤,即使我的反應是正確的。即時得到unexpectected令牌:一個有效的JSON

在此先感謝。

這裏是我的代碼:

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); 
    } 
    } 
); 

即時得到:

Uncaught SyntaxError: Unexpected token : dublinbikes:2

+1

是您'callbackParamName'正確嗎?看起來可能拼錯 – Shoe

+0

@Shoe這應該只會影響JSONP響應 - 我覺得自己什麼地方有問題的內容之間'(即它應該是「變量」,服務器作爲JSONP發回的名稱。):{格式:「json」}',@ gabolop具有指定的代理以及該代理是否被調用的事實,或者b)自身行爲。 – Juffy

+0

我不相信[V2的CityBikes的API(http://api.citybik.es/v2/)實際上支持JSONP ...? – Juffy

回答

3

根本的問題是,你得到esri.request有點糊塗你要問什麼,和什麼樣的服務器正在回饋。因爲你正在做的,從那裏你正在運行的代碼不同的域(api.citybik.es)的請求(無論您的主機),你需要使用兩種:

  • CORS
  • JSONP
  • 一代理

繞過瀏覽器的安全限制。關於這些有很多關於這方面的細節,我不會進一步運球。

您的代碼配置了兩種方法 - 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變量。或者你可以從你的esriRequest刪除callbackParamName,看看您的代理將處理來自V2地址JSON。