2012-04-15 21 views
5

Używam AJAX do asynchronicznego wywoływania skryptu PHP, który zwraca dużą serializowaną tablicę obiektów JSON (około 75kbs lub 80k znaków). Za każdym razem, gdy próbuję i zwrócę, osiąga limit 3000 znaków. Czy istnieje maksymalny rozmiar ustawiony w dowolnym miejscu na serwerach lub w ramach implementacji ajax jQuery?Limit rozmiaru odpowiedzi AJAX

EDYCJA: limit 3 000 jest limitem Chrome, FF ma limit 10 000 znaków, a Safari nie ma limitu. Zgaduję, że nie ma na to poprawki oprócz zmiany mojego kodu, aby podzielić/zmniejszyć dane zwrotne.

+0

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

+0

To ASP chociaż - Widziałem, że przy szukaniu ... – RichieAHB

+0

[Pytanie] (http://stackoverflow.com/questions/898477/ ajax-request-browser-limit) może rzucić trochę światła. Przyję ta odpowiedź stwierdza, że ​​liczebnik JSON ma znaczenie, a nie jego rozmiar. Kiedy wyświetlasz swoją odpowiedź znakową 3k, czy jest ona odcięta na początku tablicy/obiektu, czy w przypadkowym miejscu? – Bojangles

Odpowiedz

1

można podzielić JSON i dostać z $ .ajax część po części

zrobiłem dla was przykładem

html strony:

<!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> 

PHP boczny (nazwa pliku jest 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); 
    } 

} 
?> 

pierwsze z $.get (część = rozmiaru), sprawdzić, ile plaster s.

drugie z $.ajax (część = (int) część liczbami) w pętli for się części JSON jeden za drugim

na końcu z $.extend w pętli for marge nowych coraz JSON i starych JSON elementów w window.result_json

UWAGA: Zmienna $max_of_one określa liczbę plasterków do opublikowania.