2013-02-22 81 views
0

我遇到了JSONP请求没有完整返回到客户端(Sencha Touch 1.1)的问题。我在Apache2上使用PHP 5.2.5。该请求通过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是在服务器上正确创建的。它似乎在运输过程中被修改。寻找可能的解决方案和想法。

回答

0

显然,PHP脚本有导致其无法创建JSON之前输出的存储器问题引起的。我不确定这个问题是如何开始的,因为我不负责维护服务器环境。为了解决这个问题,我加了一个:

die(); 

在脚本结束时取消执行。我也拨打了电话flush()。这导致了预期的正确输出。

0

问题可以围绕压缩头,也许是不同的压缩方法,如gzip的

+0

我们卸载了mod_deflate,希望能够成为一个压缩问题,但是,当我们重新加载时,这并没有什么不同。我们正在使用反向代理和负载平衡,但我不确定这是如何起作用的。还有其他建议吗? – 2013-02-22 19:33:49

+0

我记得同样的问题,我敢肯定,你可以在没有gzip或相关的其他环境中测试吗? – 2013-02-23 11:37:13

+0

是的,它可以在没有gzip或放气的本地机器上运行。我很确定它也是如此。我感谢你的回应。也许我们会试着再次卸载mod_deflate。应该没有理由为什么代码不按预期运行。 – 2013-02-25 22:13:40

相关问题