我精于此,因为过去我使用过非常相似的代码,而且效果很好。
以下代码在服务器上导致空的$_POST
变量。我用以下方法验证了这一点:
file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);
log_file_name
的唯一内容是“ log:”然后,我使用简单的HTML表单验证了PHP。它表现出预期。
Objective-C:
NSString *word = @"this_word_gets_lost";
NSString *myRequestString = [NSString stringWithFormat:@"word=%@",
word];
[self postAsynchronousPHPRequest:myRequestString toPage:@"http://www.mysite.com/pagefolder/mypage.php" delegate:nil];
}
-(void) postAsynchronousPHPRequest:(NSString*)request toPage:(NSString*)URL delegate:(id)delegate{
NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];
NSMutableURLRequest *URLrequest = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: URL ] ];
[ URLrequest setHTTPMethod: @"POST" ];
[ URLrequest setHTTPBody: requestData ];
[ NSURLConnection connectionWithRequest:URLrequest delegate:delegate];
[URLrequest release];
}
PHP:
$word = $_POST['word'];
file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);
我在Objective-C中做错了什么,这会导致
$_POST
变量在服务器上为空? 最佳答案
如果您的代码是直接复制粘贴,则在@
之后缺少NSString *word
符号。如果这不是问题,则可能是NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];
。相反,请尝试:
NSData *requestData = [request dataUsingEncoding:NSUTF8StringEncoding];
编辑:我不是HTTP方面的专家,但我认为重定向通常会杀死POST数据,因为数据直接进入服务器(请参见here)-IE有时有时会自动重新提交POST,但它不是其中的一部分HTTP规范。