iPhone ASIHttpRequest - 无法异步POST变量

时间:2011-02-14 23:02:31

标签: iphone cocoa-touch post asihttprequest

问候,

我正在尝试使用ASIHttpRequest将数据简单地发布到网址。

这是我的代码:

__block ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url];
[request setPostBody:[NSMutableData dataWithData:[@"uname=Hello" dataUsingEncoding:NSUTF8StringEncoding]]];
[request setDelegate:self];
[request setCompletionBlock:^{
    NSString *response=[request responseString];

    UIAlertView *msg=[[UIAlertView alloc] initWithTitle:@"Response" message:response delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [msg show];
    [msg release];
}];
[request setFailedBlock:^{
    NSError *error =[request error];
}];
[request startAsynchronous];

基本上,我的网址是xxx.xxx.xxx.xxx/login.php,当我转储PHP $ _POST变量时,我只得到一个空数组 - 即没有发送POST参数! PHP的其余部分经过测试并正常运行。

我查看了allseeing-i.com文档和示例,似乎无法解决此问题。

非常感谢任何见解。

非常感谢,

2 个答案:

答案 0 :(得分:2)

我遇到了完全相同的问题。我正在使用ASIHTTPRequest并尝试设置自己的POST数据。我已经尝试了[request setPostBody:]和[request appendPostData:]。

当我在启动请求之前运行这些行时,我发现方法和数据都是我期望的。

NSLog(@"%@", [request requestMethod]);
NSLog(@"%@", [[[NSString alloc] initWithBytes:[[request postBody] bytes]
                                      length:[[request postBody] length]
                                    encoding:NSUTF8StringEncoding] autorelease]);

但是,当我将其发送到服务器时,会发出请求并记录,但POST数据为空。

但是,我通过切换到ASIFormDataRequest来获得我的代码。

然而,阅读documentation告诉我,你和我正在做的事应该是有效的,所以我怀疑这是ASIHTTPRequest中的一个错误,我将联系作者,看看是否是这种情况。

<强>更新

一种可能性是代码重定向到另一个URL。在这种情况下,可以删除后期数据。如果是这种情况,您可以尝试使用

[request setShouldUseRFC2616RedirectBehaviour:YES];⠀⠀⠀

允许请求将发布数据发送到重定向的URL。

答案 1 :(得分:0)

我相信您需要为异步设置回调函数。

-(void)requestFinished:(ASIHTTPRequest *)request{
   NSLog([request responseString]);
}

编辑:再看一遍,你在那里有一些完成区块代码......之前从未见过,但也许是照顾我上面发布的内容