我有一个经过测试和运行的php脚本,它从数据库中提取并作为XML返回。 我已经使用ASIHTTPRequest成功地对PHP脚本进行了POST。 我寻找在线帮助以实现这一目标。据我所知,所有代码都是可靠的。它编译正确,运行没有问题,甚至使请求没有问题。我没有错。 由于我已经彻底测试并成功使用了php,我认为休息是在iPhone方面。
我不明白为什么它不会将XML文件下载到指定位置。 任何见解将不胜感激。
// Create the request
NSURL *url=[[NSURL alloc]initWithString:@"http://localhost:8888/Project/script.php"];
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url]retain];
// gather *ALL* data present
if ( [txtEmail.text length] > 0 )
[request setPostValue:txtEmail.text forKey:@"email"];
if ( [txtFName.text length] > 0 )
[request setPostValue:txtFName.text forKey:@"firstname"];
if ( [txtID.text length] > 0 )
[request setPostValue:txtID.text forKey:@"id"];
if ( [txtLName.text length] > 0 )
[request setPostValue:txtLName.text forKey:@"lastname"];
[request setDidFailSelector:@selector(requestFailed:)];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDownloadDestinationPath:@"/Library/Project/dbInfo.xml"];
[request setDelegate:self];
[request startSynchronous];
[request release];
[url release];
答案 0 :(得分:3)
您的代码中的几点:
为什么使用POST请求下载文件?通常下载是通过GET请求完成的(如果我们正在谈论REST)。您可以使用简单的ASIHTTPRequest +将您的帖子值添加为URL-Parameters(相应地在php端处理它)。
您正在分配和保留您的ASIFormDataRequest实例,但只发布一次 - >导致内存泄漏。 (对于每个alloc / copy / retain - >释放它)。
回答你的问题: 我认为downloadDestinationPath是错误的(应用程序没有权限在那里写)。 更好:
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [docDir stringByAppendingPathComponent:@"dbInfo.xml"];
[request setDownloadDestinationPath:path];
现在,您的“dbInfo.xml”文件将保存在应用程序的documents文件夹中。 如果您在模拟器中运行应用程序,则可以在以下位置找到目录: 〜/ Library / Application Support / iPhone Simulator / IOS_SDK_VERSION / Applications / APP_UID / Documents
和: 如果你实现downloadProgressDelegate: request:didReceiveBytes:方法,你可以检查你是否真的在接收数据:
-(void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes {
NSLog(@"received bytes ..") ;
}