AJAX响应大小限制

9
我正在使用AJAX异步调用一个PHP脚本,该脚本返回一个大型序列化的JSON对象数组(约75kbs或80k个字符)。每次我尝试返回它时,它都会达到3000个字符的限制。服务器或jQuery的ajax实现是否设置了任何最大大小?编辑:3000限制是Chrome的限制,FF有10000个字符的限制,Safari没有限制。我猜除了改变我的代码以拆分/减少返回数据外,没有其他解决方法。

类似:https://dev59.com/c3M_5IYBdhLWcg3w9oQA - Travis J
那是ASP,我在搜索时看到了... - RichieAHB
这个问题可能会有所启示。接受的答案指出,重要的是JSON数组的深度,而不是它的大小。当您查看3k字符响应时,它是在数组/对象的开头被截断还是在随机位置被截断? - Bojangles
错误是逻辑错误还是显式错误? - Travis J
它返回预期返回值的开头,然后在中间有一个省略号,最后返回预期返回值的结尾。 - RichieAHB
@JamWaffles - 另外,我只返回一个以纯文本序列化的JSON数组,所以我猜它不应该将其读取为JSON。 - RichieAHB
1个回答

1
你可以通过$.ajax逐步分离JSON并获取它们。
我为您制作了一个示例。
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>

PHP端(文件名为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);
    }

}
?>

首先使用$.get(part=size)检查有多少个片段。

其次,使用$.ajax(part=(int)PART-NUMBER) ,在for循环中逐个获取JSON的部分。

最后,在for循环中使用$.extend将新获取的JSON和旧的JSON元素合并到window.result_json中。

注意:$max_of_one变量确定要发布多少个片段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接