2012-11-05 20 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