3

ArcGIS、Esri リクエストを使用しており、Web サーバーからデータを取得しようとしていますが、応答が正しい場合でも、同じ「予期しないトークン:」エラーが発生するたびに発生します。

前もって感謝します。

これが私のコードです:

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

4

1 に答える 1

2

根本的な問題は、esri.request何を求めているのか、サーバーが何を返しているのかについて少し混乱していることです。コードを実行している場所 (ホストが何であれ)とは異なるドメイン ( api.citybik.es) でリクエストを行っているため、次のいずれかを使用する必要があります。

  • CORS
  • JSONP
  • プロキシ

ブラウザのセキュリティ制限を回避します。これらについては、SO に関する詳細がたくさんあります。これ以上は説明しません。

コードには 2 つのメソッドが構成されています。JSONP を使用するように指示し、念のためプロキシ セットも用意していますcallbackParamName。ただし、JSONP のみを使用するように指示されているため、プロキシは無視されますesri.requestcallbackParamName

上記のコメントで指摘したように、本当の問題は、CityBikes APIの v2 が実際には JSONP をサポートしていないように見えるため、コールバック パラメーターが無視され、サーバーがそのまま JSON を返すことです。esri.requestJSONP が期待されており、出来上がり - 予期しない token :. リクエスト中

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 に答える