2012-11-05 39 views
0

我有一個javascript文件,它生成一些JSON,並對寫入和創建JSON文件的php文件進行AJAX調用。直到我開始生成相當大的JSON文件之前,一切都運行良好。目前,我有一個9MB的json文件,我知道它的結構正確,因爲當我使用console.log打印出來並手動放入文件時,它可以正常工作。調試失敗ajax POST調用,類型正在等待

但是,Ajax調用無法成功。我嘗試了一個正常的XHR調用和jQuery Ajax,都失敗了,並沒有提供太多的信息。我嘗試了Chrome和Firefox。看開發工具,狀態文本說(失敗)和類型說懸而未決。沒有狀態代碼出現,我擁有的是statusText:在Ajax錯誤回調中出現「錯誤」。我試着用超時和同步調用搞亂,但似乎沒有任何工作/

關於如何進一步調試的任何想法?

代碼示例

var name = "test.json"; 
var json = '{ 
    "type": "FeatureCollection", 
    "bbox": [ 
     1.4137153625488281, 
     42.4288330078125, 
     1.7842082977294922, 
     42.652313232421875 
    ], 
    "features": [ 
     { 
      "type": "Feature", 
      "bbox": [ 
       1.4137153625488281, 
       42.4288330078125, 
       1.7842082977294922, 
       42.652313232421875 
      ], 
      "geometry": { 
       "type": "Polygon", 
       "coordinates": [ 
        [ 
         [ 
          1.5753068923950195, 
          42.6473388671875 
         ], 
         [ 
          1.5828666687011719, 
          42.63543701171875 
         ], 
         [ 
          1.5753068923950195, 
          42.6473388671875 
         ] 
        ] 
       ] 
      }, 
      "properties": { 
       "ID_0": "6", 
       "ISO": "AND", 
       "NAME_ENGLI": "Andorra", 
       "NAME_OBSOL": "" 
      } 
     } 
    ] 
}'; 



$.ajax({ 
     type:"POST", 
     url:"log.php", 
     data: { data: json, file: name }, 
     dataType: "json", 
     success:function(response) { 
      console.log(response); 
     }, 
     error:function(error) { 
      console.log(error); 
     } 
}); 

這是log.php:

if (isset($_POST['file'])) { 
$file = $_POST['file']; 
$data = str_replace("\\", "", $_POST['data']); 

file_put_contents($file, $data); 
exit(); 
} 

我的主要問題是,當AJAX失敗,你怎麼調試好?我的錯誤回調在這裏沒有提供任何好的信息。我嘗試着在chrome中查看net-internals,但是我找不到那裏。有任何想法嗎?

也許這是一個服務器端問題。當我查看Chrome網絡內部時,我發現處理較小的JSON(長度= 121664)會使POST請求成功,並且網絡內部顯示HTTP_TRANSACTION_READ_RESPONSE_HEADERS,但是大型JSON(長度= 7036490)會給我 - > net_error = -324( ERR_EMPTY_RESPONSE)而不是響應頭。雖然我在phpinfo中看不到超時信息...

+0

請發佈代碼示例。你在js中使用回調嗎? – 2012-11-05 18:23:58

+2

也許響應大於服務器允許的響應。 –

+0

只需在瀏覽器中輸入URL並查看服務器是否響應。如果是這樣,你的問題在客戶端。如果不是,它在服務器上。 –

回答

0

首先,檢查服務器端的錯誤日誌。
嘗試增加PHP中的maxRequestLength設置,如果請求花費很長時間處理。

如果是客戶端問題,最好讓它通過瀏覽器工作,就是在客戶端分割你的帖子並將它張貼在多個部分。在服務器端,您可以將其保存在臨時文件中。

+0

這是一個客戶端問題,是的,拆分文章將工作,但我想調試大Ajax請求失敗。問題是如何。 – iwek