У меня возникла проблема с запросом JSONP, не возвращающим целостность клиенту (Sencha Touch 1.1). Я использую PHP 5.2.5 с Apache2. Запрос создается с помощью шаблона Expression Engine и отправляется с использованием заголовка «Content-type: text/javascript; charset = utf-8». Буферизация вывода включена. Я должен вручную очистить, прежде чем он отправит правильный заголовок, иначе он отправит его как «text/html».Данные удаляются из JSON перед отправкой клиенту
Я проверил код локально, и он правильно строит и возвращает запрос. В 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();
}
Код работал на prod перед тем, как не смывать. Раньше у меня никогда не было проблемы. Я подтвердил, что JSON создан на сервере правильно. Кажется, он изменен во время транспортировки. Ищете идеи о том, что это может быть и возможное решение.
Мы выгрузили mod_deflate в надежде на проблему сжатия, однако это не имело никакого значения, когда мы перезагружались. Мы используем обратные прокси и балансировку нагрузки, хотя я не уверен, как это играет в этом. Любые другие предложения? –
Я помню ту же проблему, я уверен, что вы можете протестировать в других средах без gzip или связанных? –
Да, он работает на моей локальной машине без gzip или сдувается. Я был уверен, что это так. Я благодарю вас за ответы. Возможно, мы попытаемся снова выгрузить mod_deflate. Не должно быть причин, по которым код не работает по назначению. –