2011-12-14 9 views
6

なぜ私は非常に多くの異なるエラーが発生するのですか? は、私はテストのためのGoogleプレイスAPIを使用して、単にコールバックとAjaxのクエリの呼び出しを使用しています、私はJSONをバック受け取るが、地獄はある理由をChromeブラウザに私はGoogle Places API:jsonエラーUncaught SyntaxError予期しないトークン

"Uncaught SyntaxError: Unexpected token :" 

を取得しますか? 私はGoogleが正しいと思っていて、彼らのjsonは正しいはずです...だから、どこに問題があるのでしょうか?

これは、サーバーはプレーンJSONを返す場合は、このエラーを取得する私のコード

$.ajax({ 
    dataType: "json", 
    url: "https://maps.googleapis.com/maps/api/place/search/json?location=40.47,-73.58&radius=5000&sensor=false&key=MYOWN&name&callback=?", 
    success: function(data) { 
     console.log('success'); 
    }, 
    error: function(data) { 
     console.log('error'); 
    } 
}); 
+3

コールバック関数と同じようにJSONをラップします。投稿できますか? – JaredPar

+0

私はこの男は私と同じ問題を抱えていると誰もそれを修正する方法を知っているとは思わないhttp://stackoverflow.com/questions/7080050/google-places-api-error-with-jquery-ajax-call-html-属性 – Francesco

答えて

4

です。 これはクロスサイトリクエストであるため、jQueryはserver-responseがスクリプトとして解釈されるJSONP-techniqueを使用する必要があります。これは、ブラウザでクロスサイトリクエストを行う唯一の方法です。

問題はです。サーバーはJSONPをサポートし、jQueryによって生成されたコールバックでJSON回答を囲む必要があります。 jQueryを使って

<?php 
header("Content-Type:text/javascript"); // avoid browser warnings 
$request = new HttpRequest("http://programmingisart.com/json-data-source.php", HttpRequest::METH_GET); 
$request->send(); 
$json_data = $request->getResponseBody(); 

// wrap the data as with the callback 
$callback = isset($_GET["callback"]) ? $_GET["callback"] : "alert"; 
echo $callback."(".$json_data.");"; 

クライアント例:PHPで

jQuery17101705844928510487_1324249734338({"data":"whatever"}); 

サーバー-例:応答はそのように見えなければなりません

<div id="json-result"></div> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      dataType: "jsonp", 
      url: "jsonp-wrapper.php", 
      success: function(data) { 
       $("#json-result").html(JSON.stringify(data)); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
</script> 

あなたはどんなでPHPコードを置き換えることができます他のサーバープラットフォームを使用して、必要な手順を実行します。

  • HTTPリクエストJSONソース
  • に問題があなたのコードである
+0

"HTTPリクエストを直接処理できるプラットフォーム"とはどういう意味ですか? – Francesco

+0

Webサイト内では、発信元ポリシーの制限があり、Ajax-Request(単純なHTTPリクエスト)を介して他のドメインにアクセスすることはできません。 他のサーバーからスクリプトを読み込むことができるので、あなたまたはapi-providerはスクリプト内のデータをラップし、コールバックを使ってそれらに渡すことができます。問題は、api-providerがこの手法をサポートしなければならないことです。そうでなければ、サーバ上のapiにリクエストをして、自分でスクリプトのラッピングを行う必要があります。 –

+0

Excelent提案。サーバー内でPHPを使用する必要があり、すべてのPHP拡張機能をテストする必要があるため、JSON情報を印刷できるようにステップが少しオーバーロードされています。私は私のPHPでHttpRequestクラスを持っていなかったので、私はあなたの正確なソリューションを使用することができませんでした代わりに '$ json_data = file_get_contents($ url);'を使用し、それはJSONとしてhtmlから直接です。それにもかかわらず、これを行う必要があり、HTMLから直接解析できない___の痛みです。それは常に2つのエラーの1つ、 ':'トークン、またはパーミッションを持つ1つの問題でした。 – unmultimedio

関連する問題