0

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 がサーバー上で正しく作成されていることを確認しました。輸送中に変更されたようです。それが何であるか、可能な解決策についてのアイデアを探しています。

4

2 に答える 2

0

どうやら PHP スクリプトにメモリの問題があり、出力前に JSON が作成されなかったようです。私はサーバー環境を維持する責任を負っていないため、この問題がどのように始まったのかはわかりません。この問題を修正するために、次を追加しました。

die();

スクリプトの最後で実行をキャンセルします。にも電話をかけましたflush()。これにより、期待される正しい出力が得られました。

于 2013-02-26T17:36:44.113 に答える
0

問題は圧縮ヘッダーにある可能性があり、gzip などのさまざまな圧縮方法が原因である可能性があります

于 2013-02-22T15:39:36.340 に答える