jQuery AJAX进度事件不基于响应值大小触发

时间:2015-02-26 22:06:33

标签: php jquery ajax

我正在尝试从$ .ajax电话中收集进度信息。

$.ajax({
                type: 'POST',
                url: '/site/search',
                data: {query:"test"},
                dataType: 'JSON',
                xhr: function(){
                    var xhr = new window.XMLHttpRequest();

                    //Upload progress
                    xhr.upload.addEventListener("progress", function(evt){
                        if (evt.lengthComputable) {
                            var percentComplete = evt.loaded / evt.total;
                            //Do something with upload progress
                            console.log('upload event: ' + percentComplete * 100);
                        }
                    }, false);

                    //Download progress
                    xhr.addEventListener("progress", function(evt){
                        if (evt.lengthComputable) {
                            var percentComplete = evt.loaded / evt.total;

                            //Do something with download progress
                            console.log('download event: ' + percentComplete * 100);
                        } else {
                            console.log('error computing');
                            console.log(event);
                        }
                    }, false);
                    return xhr;
                },
                success: function(result){
                    console.log(result);
                },
            });

ajax调用是从输入字段的keyup事件发出的,用于将字段的当前值发送到php文件以解释和处理搜索。目前,正在使用虚拟数据。

这是PHP:     public function actionSearch(){         $ query = $ _POST ['query'];

    $test = array();

    for($i=0; $i<80; $i++){
        $test[$i] = array(
            'id'=>$i,
            'first_name'=>'test' . $i,
            'last_name'=>'tester' . $i,
            'email'=>'tester' . $i . "@email.com",
            'special'=>$i * 3.14,
        );
    }

    echo json_encode($test);
}

此时,当进行调用时,它成功返回对象的json对象(用于表示记录),并且ajax正确地将进度值记录到控制台。

问题在于:如果我尝试返回超过80条记录,则ajax事件的lengthComputable设置为false,并且我没有获得进度百分比。

我假设基于我正在处理响应大小太大问题的记录数量的任意性质,但我不知道如何处理它。我已经测试了超过300个对象的响应,并且它加载得很好,但我真的想要进度值。

我有两种方法可以同时拥有它们吗?

谢谢!

0 个答案:

没有答案