Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当使用AJAX XMLHttpRequest时,Symfony StreamedResponse的响应文本被连接起来_Javascript_Ajax_Symfony_Xmlhttprequest - Fatal编程技术网

Javascript 当使用AJAX XMLHttpRequest时,Symfony StreamedResponse的响应文本被连接起来

Javascript 当使用AJAX XMLHttpRequest时,Symfony StreamedResponse的响应文本被连接起来,javascript,ajax,symfony,xmlhttprequest,Javascript,Ajax,Symfony,Xmlhttprequest,我有一个控制器,它在调用端点时立即返回行1(作为响应)。两秒钟后,它返回第2行。当我直接访问URLhttp://ajax.dev/app_dev.php/v2因此,这证明端点按预期工作 /** * @Method({"GET"}) * @Route("/v2", name="default_v2") * * @return Response */ public function v2Action() { $response = new StreamedResponse();

我有一个控制器,它在调用端点时立即返回
行1
(作为响应)。两秒钟后,它返回第2行。当我直接访问URL
http://ajax.dev/app_dev.php/v2
因此,这证明端点按预期工作

/**
 * @Method({"GET"})
 * @Route("/v2", name="default_v2")
 *
 * @return Response
 */
public function v2Action()
{
    $response = new StreamedResponse();
    $response->setCallback(function () {
        echo 'Line 1';
        ob_flush();
        flush();

        sleep(2);
        echo 'Line 2';
        ob_flush();
        flush();
    });

    return $response;
}
当我使用AJAX调用同一个端点时,第一个响应是
响应:“第1行”
。但是,第二个是
响应:“Line 1Line2”
,因此它是组合的。我应该怎么做才能得到
响应:“Line2”
作为第二个响应?请参阅下面的控制台日志

XMLHttpRequest { onreadystatechange: xhr.onreadystatechange(), readyState: 3,
timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload,
responseURL: "http://ajax.dev/app_dev.php/v2", status: 200, 
statusText: "OK", responseType: "", response: "Line 1" }

XMLHttpRequest { onreadystatechange: xhr.onreadystatechange(), readyState: 3,
timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload,
responseURL: "http://ajax.dev/app_dev.php/v2", status: 200, 
statusText: "OK", responseType: "", response: "Line 1Line2" }

Complete
这就是我正在使用的AJAX

$(document).ready(function () {
    $('button').click(function () {
        xhr = new XMLHttpRequest();
        xhr.open("GET", 'http://ajax.dev/app_dev.php/v2', true);
        xhr.onprogress = function(e) {
            console.log(e.currentTarget);
        };
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                console.log("Complete");
            }
        };
        xhr.send();
    });
});

目前,这只能是一个暂时的解决方案,因为每一个响应加起来都是一个巨大的响应,而不是一个干净的响应

e、 g

XMLHttpRequest
e.currentTarget
属性将包含:

Hello
HelloWorld
HelloWorldBye

目前我将使用下面的代码,但如果我能找到更好的解决方案,我会发布它

<script>
    $(document).ready(function () {
        $('button').click(function () {
            xhr = new XMLHttpRequest();
            xhr.open('GET', 'http://ajax.dev/app_dev.php/v2', true);
            xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

            xhr.onprogress = function(e) {
                var response = e.currentTarget.response;
                var output = typeof lastResponseLength === typeof undefined
                    ? response
                    : response.substring(lastResponseLength);

                lastResponseLength = response.length;
                console.log(output);
            };

            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) {
                    console.log('Complete');
                }
            };

            xhr.send();
        });
    });
</script>

$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
xhr=newXMLHttpRequest();
xhr.open('GET','http://ajax.dev/app_dev.php/v2",对),;
setRequestHeader('X-request-With','XMLHttpRequest');
xhr.onprogress=函数(e){
var响应=e.currentTarget.response;
变量输出=lastResponseLength的类型===未定义的类型
?响应
:response.substring(lastResponseLength);
lastResponseLength=响应长度;
控制台日志(输出);
};
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
console.log('Complete');
}
};
xhr.send();
});
});

Look at this response@yceruto的可能重复链接非常有用!非常感谢。所以我面临的问题是XMLHttpRequest的默认行为。看来我还得检查一下长度。
<script>
    $(document).ready(function () {
        $('button').click(function () {
            xhr = new XMLHttpRequest();
            xhr.open('GET', 'http://ajax.dev/app_dev.php/v2', true);
            xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

            xhr.onprogress = function(e) {
                var response = e.currentTarget.response;
                var output = typeof lastResponseLength === typeof undefined
                    ? response
                    : response.substring(lastResponseLength);

                lastResponseLength = response.length;
                console.log(output);
            };

            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) {
                    console.log('Complete');
                }
            };

            xhr.send();
        });
    });
</script>