1

最新のブラウザでは外部 URL への AJAX リクエストが許可されていないことは承知しています。回避策は JSON エンコーディングであり、次のようにしています。

 function findZipCodesInRadius(userZip, radiusInMiles) {

     $.getJSON("http://mydomain.com/php/zipCodesInRadius.php?callback=?", {
         TheUserZip: userZip,
         TheRadiusInMiles: radiusInMiles
     },

     function (data) {
         alert("Data Loaded: " + data);
     });


 }

PHP側では、次のように結果を「エコー」します。

$JSONData = array("callback"=>"true"); 
echo json_encode($JSONData); 

グーグルを見回した後、上記のコードは私が見つけたものであり、まだ機能していません。コールバックを適切にエコーするにはどうすればよいですか? 多分私はajaxリクエストを間違ってやっていますか? 私は通常、別の方法でそれを行いますが、私の別の Web サイトにあるファイルにアクセスしようとしているため、要求を送信する適切な方法についてあらゆる場所を探していて、これが私が思いついたものです。私が間違っているのかわかりません。

4

3 に答える 3

2

これを機能させるには、コールバック関数を実装する必要があります。で定義されているコールバック関数で json_encode をラップする必要があります$_GET['callback']

たとえば、echo $_GET['callback']."(".json_encode($JSONData).")";.

于 2013-01-24T08:16:09.013 に答える
1

jsonp リクエストのコールバックを追加する必要があります

$JSONData = array("callback"=>"true");
$callback = $_GET['callback'];
echo $callback,'(',json_encode($JSONData),')'; 
于 2013-01-24T08:16:36.890 に答える
1

最新のブラウザでは、外部 URL への AJAX リクエストが許可されていないことは承知しています。

それどころか、最新のブラウザでは、そうするように指示すれば許可されます ( CORSを参照) 。

回避策は、JSONエンコーディングではなく、動的要素を使用して外部ソースをロードする手法であるJSONPです。<script>これが機能するには、ソースが実行可能な JavaScript である必要があります。ここでcallbackパラメーターが機能します。

echo $_GET['callback'] . '(' . json_encode($JSONData) . ')'; 

パラメータは関数名になりますが、JS コードでは気にする必要はありません。JQuery.getJSON が透過的に処理します。

于 2013-01-24T08:21:20.803 に答える