gpt4 book ai didi

javascript - 努力解析 responseText

转载 作者:IT王子 更新时间:2023-10-29 06:16:01 29 4
gpt4 key购买 nike

我玩得很开心

  • Redis
  • 网盘
  • Dart

这是我写的

#import('dart:html');
#import('dart:json');

class ChatClient {
XMLHttpRequest listener;
int parsePosition = 0;

void connect(){
this.listener = new XMLHttpRequest();
this.listener.open("GET", "http://i.target.co.uk:9005/subscribe/test.json", true);
this.listener.setRequestHeader('Accept', 'application/json');
this.listener.on.readyStateChange.add(handleData);
this.listener.send();
}

void handleData(Event event){
print(this.listener.responseText);
/*
if (this.listener.responseText != ""){
Map data = JSON.parse(this.listener.responseText);
print(data["subscribe"]);
}
*/
}
}

void main(){
ChatClient client = new ChatClient();
client.connect();
document.query('#status').innerHTML = 'Loaded!';
}

问题是,每次我发布内容时,responseText 的大小都会像这样增长

{"subscribe":["subscribe","test",1]}
{"subscribe":["subscribe","test",1]}{"subscribe":["message","test","e"]}
{"subscribe":["subscribe","test",1]}{"subscribe":["message","test","e"]}{"subscribe":["message","test","e"]}

现在你不能解析

{"subscribe":["subscribe","test",1]}{"subscribe":["message","test","e"]}{"subscribe":["message","test","e"]}

那我该怎么办?你能清除responseText吗?刷新缓冲区?什么?

编辑:我知道您可以迭代整个字符串或跟踪每个 json 对象的长度,但是没有更简洁的方法吗?

编辑:使用新的打印语句

readyStat: 2 status: 200
{"subscribe":["subscribe","test",1]}
readyStat: 3 status: 200
{"subscribe":["subscribe","test",1]}{"subscribe":["message","test","e"]}
readyStat: 3 status: 200

最佳答案

编辑 2:这个stack overflow问题和readyState变化有类似的问题: Ajax readystate 3 (Chrome / IE) - 我正在努力寻求更体面的帮助。


编辑:我想我已经把你带到了花园小径上 - ajax 请求的响应状态表明 (3) 它仍在加载/接收信息。

这并不直接适用于您的问题,但我觉得这是问题的一部分。

我快速扫描了 http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/我发现:`readyState of type unsigned short, readonly对象的状态。该属性必须是以下值之一:

0 Uninitialized
The initial value.
1 Open
The open() method has been successfully called.
2 Sent
The UA successfully completed the request, but no data has yet been received.
3 Receiving
Immediately before receiving the message body (if any). All HTTP headers have been received.
What about HEAD requests?
4 Loaded
The data transfer has been completed.

所以在第 3 阶段,我们有 responseText 保存部分数据。

来自 http://jszen.blogspot.co.uk/2005/03/xmlhttp-and-readystate.html :

... the URI /some/uri can establish a persistent connection, which means that unless the connection is terminated by the script or the server, readyState will always be 3 (interactive). According to the docs, I should be able grab the incomplete response from the server at this time, but apparently not ...


在 msdn 上,我发现了这个 http://msdn.microsoft.com/en-us/library/ie/ms534361(v=vs.85).aspx :

You cannot call responseBody and responseText properties to obtain partial results (readyState = 3). Doing so will return an error, because the response is not fully received. You must wait until all data has been received.


第一个答案:

void handleData(Event event){
print(this.listener.responseText);

int a = this.listener.readyState;
int b = this.listener.status;
print("readyStat: $a status: $b");

if (this.listener.readyState == 4 && this.listener.status == 200) {
if (this.listener.responseText != ""){
Map data = JSON.parse(this.listener.responseText);
print(data["subscribe"]);
}
}
}

在接收者对象上,您将拥有一个 readyState 和一个状态。如果您等到它们处于完成状态 readyState == 4status==200,您的数据可能在完成时完成。

这是未经测试的,因为我没有合适的环境来测试它

关于javascript - 努力解析 responseText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156300/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com