我有一个相当大的调用我要加入4个表并获得50行。当我在PHP服务器上执行拉动时,它会在0.0013秒内完成拉动,这很好。因此,我尝试从我的iOS设备调用PHP来获取记录,有时我会得到它们,有时候我会得到一半。
这是我的PHP SQL代码。
$sql = "SELECT NF.id, NF.type, NF.groupid, NF.classid, NF.videoid, NF.lessonid, NF.text, NF.path, NF.datetime, Groups.name as groupname, Groups.imagepath as groupimage, Classes.title as classname, Classes.imagepath as classimage, Videos.title as videoname, Videos.videopath as videopath, Lessons.title as lessonname, Lessons.imagepath as lessonimage
FROM NewsFeed as NF
LEFT OUTER JOIN Groups on (NF.groupid=Groups.id)
LEFT OUTER JOIN Classes on (NF.classid=Classes.id)
LEFT OUTER JOIN Videos on (NF.videoid=Videos.id)
LEFT OUTER JOIN Lessons on (NF.lessonid=Lessons.id)
WHERE $searchstring
ORDER BY NF.datetime DESC LIMIT 50";
$request = mysql_query($sql) or die(mysql_error());
$arr = array();
if(mysql_num_rows($request)){
while($obj = mysql_fetch_object($request)) {
$arr[] = $obj;
}
}
// Return Array
echo '{"newsfeed":'.json_encode($arr).'}';
mysql_close($link);
现在,当我回显json_encoded数组时,有时候我会从" newsfeed"开始得到整个数组:有时我会得到这样的结果:
2014-04-24 23:07:09.574 ProgramName [6573:60b]我们的编程理论......","路径":" http:// site.com/LMS/NewsFeedPictures/IMG2014170220465189.PNG" ;,"datetime" ;:" 2014-02-17 20:46:56"," groupname" :" LMS for iOS"," groupimage":" http://site.com/LMS/GroupThumbnails/LMS.jpg"," classname&# 34;:null," classimage":null," videoname": ... (以及越来越多的记录,直到结束。)
正如您所看到的,内容字符串开始的位置是我数据的中间位置!
所以问题是为什么PHP只返回部分数据?
答案 0 :(得分:0)
我之前见过这个。
当时我的主要罪魁祸首是来自mysql的返回数据中的字符串中的双引号(")。它在到达js调用时使json字符串无效。
尝试通过许多json validator验证从php生成的json。我最喜欢的是jslint
答案 1 :(得分:0)
在做了一些检查,双重检查和一些更多的测试后,我得出结论,它毕竟不是我的PHP,这是我的NSURLConnection。
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
你不能依赖这种方法来恢复整个数据,它会在某些情况下中断。因此,您必须实现NSMutableData集并附加如下数据......
if(arrData != nil){
[arrData appendData:data];
}
在连接中确实完成了委托,这样做......
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
if (arrData != nil) {
//Some method to return or use arrData
arrData = nil;
}
}
这样您将始终收到完整数据。感谢@Robotys的帮助和新工具!