2012-04-15 33 views
5

Estoy usando AJAX para llamar asincrónicamente un script PHP que devuelve una gran matriz serializada de objetos JSON (aproximadamente 75 kb o 80k caracteres). Cada vez que intento devolverlo, alcanza un límite de 3000 caracteres. ¿Hay un tamaño máximo establecido en cualquier lugar en los servidores o dentro de la implementación de jQuery's ajax?AJAX Límite de tamaño de respuesta

EDITAR: el límite de 3'000 es un límite de Chrome, FF tiene un límite de 10'000 caracteres y Safari no tiene límite. Supongo que no hay una solución para esto aparte de cambiar mi código para dividir/disminuir los datos de retorno.

+0

Similar: http://stackoverflow.com/q/1151987/1026459 –

+0

Eso es ASP aunque: lo vi al buscar ... – RichieAHB

+0

[Esta pregunta] (http://stackoverflow.com/questions/898477/ ajax-request-browser-limit) puede arrojar algo de luz. La respuesta aceptada indica que es la profundidad del array JSON lo que importa, no su tamaño. Cuando ves tu respuesta de 3k, ¿está cortada al comienzo de una matriz/objeto, o en un lugar aleatorio? – Bojangles

Respuesta

1

Puede dividir su JSON y obtener con $ .ajax parte por parte

hice un ejemplo para usted

lado HTML:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
    <script src="jquery.js"></script> 
    <script> 
    $(document).ready(function() { 

     window.result_json = {}; 

     $.get("x.php?part=size",function(data){ 
      var count = data; 
      for (var i = 0; i <= count; i++) { 
      $.ajax({ 
       dataType: "json", 
       url: "x.php", 
       async: false, 
       data: "part="+i, 
       success: function(data){ 
       $.extend(window.result_json,data); 
       } 
      }); 
      }; 
      console.log(window.result_json); 
     }); 
    }); 
</script> 
</head> 
<body> 

</body> 
</html> 

lado PHP (nombre del archivo es x. php):

<?php 
if(isset($_GET['part'])){ 

    function send_part_of_array($array,$part,$moo){ 
     echo json_encode(array_slice($array, $part * $moo,$moo,true),JSON_FORCE_OBJECT); 
    } 
    $max_of_one = 3; 
    $a = array("a","b","c","d","e","f","g","h","i","j"); 

    if($_GET['part'] == 'size'){ 
     echo round(count($a)/$max_of_one); 
    }else{ 
     send_part_of_array($a,$_GET['part'],$max_of_one); 
    } 

} 
?> 

primer lugar con $.get (parte = tamaño), comprobar cuántos rebanada s.

segundo lugar con $.ajax (parte = (int) PART-NUMBER), en bucle for conseguir las piezas de JSON uno por uno

Por último con $.extend en para marge bucle nuevas conseguir elementos JSON y JSON viejo en window.result_json

NOTA: la variable $max_of_one determina cuántas rebanadas desea publicar.