gpt4 book ai didi

php - 从 php 到 iOS 应用程序的不完整 json 响应

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:49 25 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我有一个调用服务器上的 php 脚本的异步连接。此脚本对数据库进行查询并使用 json_encode 给出响应。

这是脚本:

$result = mysql_unbuffered_query($query);
if ($result){
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$output[] = $row;
}
if($output!=null)
echo json_encode($output);
else
echo "0";
}

当响应很短时一切正常,但是当我有很长的响应(比如 500 个字符)时,我收到一个不完整的 json,例如:

[{"user":"1","password":"password","tel":"3333333333","description":"some text, some text, some text","data":"2013-10-13 09:53:54"}, {"user":"1","password":"password","tel":"3333333333","description":"some text, so

在我的 iOS 应用程序中,我使用这段代码来解码 json:

json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

如果我收到一个完整的 json,一切正常,否则如果我收到一个不完整的 json,我会发送一个新请求。当json内容很长很长的时候,收到的json是不完整的,但是有的时候,经过一些请求,反正响应是好的。

/* 更新问题 */

执行请求:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:advertURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];

NSString *queryString = [NSString stringWithFormat: @"%@", query];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
myConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

获取响应:

//in NSURL method didReceiveResponse

ResponseData = [[NSMutableData alloc] init];

//in NSURL method didReceiveData

[ResponseData appendData:data];

NSString *result = [[NSString alloc] initWithData:ResponseData encoding:NSUTF8StringEncoding];
json = [NSJSONSerialization JSONObjectWithData:Responsedata options:kNilOptions error:&error];

if(!json){
//incomplete json!
}
else{
//good json!
}

为什么会这样?我该如何解决这个问题?

希望我解释清楚,谢谢。

最佳答案

当人们使用 NSURLConnectionDataDelegate 方法(或 NSURLSessionDataDelegate 方法)时,这个问题很常见,但没有意识到它可能需要多次调用 didReceiveData 接收整个负载。

那么,你可以做的是:

  • didReceiveResponse中实例化一个NSMutableData

  • didReceiveData 仅将数据附加到 NSMutableData,认识到对于较大的有效负载,可能需要多次调用此方法才能接收到所有数据;和

  • connectionDidFinishLoading: 中(如果使用 NSURLConnection;如果使用 NSURLSession,则使用 URLSession:task:didCompleteWithError: 方法),然后在接收到所有数据后继续解析。

关于php - 从 php 到 iOS 应用程序的不完整 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714682/

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