JSONP リクエストがそのままクライアントに返されないという問題があります (Sencha Touch 1.1)。私はApache2でPHP 5.2.5を使用しています。リクエストは Expression Engine テンプレートを介して作成され、ヘッダー「Content-type: text/javascript; charset=utf-8」を使用して送信されます。出力バッファリングがオンになっています。正しいヘッダーを送信する前に手動でフラッシュする必要があります。そうしないと、「text/html」として送信されます。
コードをローカルでテストしたところ、リクエストを正しくビルドして返します。prod と dev では、リクエストの内容を取り除きます。例:
stcCallback1001(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]});
XAMPP Apache2/PHP 5.3.8 を使用しているマシンでは正しく動作するため、環境またはセキュリティ ポリシーの問題であると考えています。以下のコードのスニペット:
$stores = array();
foreach ($results as $key => $value)
{
$week = ($value['field_id_51'] == 'Y') ? '24hrs' : $value['field_id_49'] . '-' . $value['field_id_50'];
$sat = ($value['field_id_54'] == 'Y') ? '24hrs' : $value['field_id_52'] . '-' . $value['field_id_53'];
$sun = ($value['field_id_57'] == 'Y') ? '24hrs' : $value['field_id_55'] . '-' . $value['field_id_56'];
$dist = distance($lat, $lon, $value['field_id_58'], $value['field_id_59']);
if ($dist <= $rad)
{
$stores[] = array(
"store_id" => (string)$value['title'],
"street" => (string)$value['field_id_43'],
"city" => (string)$value['field_id_44'],
"state" => (string)$value['field_id_45'],
"zip" => (string)$value['field_id_46'],
"phone" => (string)$value['field_id_41'],
"fax" => (string)$value['field_id_42'],
"pharm" => (string)$value['field_id_47'],
"pharm_2" => (string)$value['field_id_48'],
"week" => (string)$week,
"sat" => (string)$sat,
"sun" => (string)$sun,
"lat" => (string)$value['field_id_58'],
"lon" => (string)$value['field_id_59'],
"distance" => (string)$dist,
);
}
}
$totalResults = count($stores);
$stores = ($totalResults > 0) ? subval_sort($stores, 'distance') : '';
$push = array(
"latitude" => $lat,
"longitude" => $lon,
"radius" => $rad,
"numResults" => $totalResults,
"stores" => $stores
);
$callback = (isset($_GET['callback'])) ? ($_GET['callback']) : null;
if($callback) {
header('Content-type: text/javascript; charset=utf-8');
echo $callback . '(' . json_encode($push) . ');';
flush();
}
else {
header('Content-type: application/x-json; charset=utf-8');
echo json_encode($push);
flush();
}
このコードは、以前はフラッシュせずに製品で機能していました。これまで問題があったことはありません。JSON がサーバー上で正しく作成されていることを確認しました。輸送中に変更されたようです。それが何であるか、可能な解決策についてのアイデアを探しています。