一如既往,我一直在搜索论坛,用google搜索我的自己有点疯狂,但却无法弄清楚我做错了什么。因此,我转向那些经常访问这个网站的伟大思想,希望找到答案。 我正在构建一个与数据库通信的应用程序,并且这样做我正在尝试使用JSON通过iPhone检索和发布数据到数据库,使用在线发现的各种示例。我已经设法使用JSON从Web检索数据并在tableview中显示它,但是当我尝试POST数据时,似乎没有任何作用。 基本上我有一个简单的php脚本,它应该将它收到的数据写出来一个文本文件(见下文)。
<?php
//header('Content-type: application/x-json');
$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = var_dump($_POST);
fwrite($fh, $stringData);
$stringData = "=== JSON Decoded ===";
fwrite($fh, $stringData);
$stringData = $_POST["tmp"];
fwrite($fh, json_decode($stringData));
$stringData = "=== JSON Decoded ===";
fwrite($fh, $stringData);
fclose($fh);
?>
问题是脚本似乎没有收到任何东西。发布到它时,它会创建一个看起来像这样的文件。所以它确实创建了所有文件,但其中没有任何内容。
=== JSON Decoded ====== JSON Decoded ===
下面的代码是我在XCode中的POST方法。
-(IBAction)poststuff:sender{
NSString *stuffToPost = [[NSString alloc] initWithFormat:@"Work, damn you!"];
NSURL *jsonURL = [NSURL URLWithString:@"http://localhost:8888/iWish/json_post.php"];
NSData *postData = [stuffToPost dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"Stuff I want to POST:%@", stuffToPost);
NSLog(@"Data I want to POST:%@", postData);
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:jsonURL];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *serverReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data = [[NSString alloc] initWithData:serverReply encoding:NSUTF8StringEncoding];
NSLog(@"Raw Data:", data);
}
当触发方法并写出空文本文件时,控制台看起来像这样:
2010-10-04 14:10:16.666 iWish[38743:207] Stuff I want to POST:Work, damn you!
2010-10-04 14:10:16.668 iWish[38743:207] Data I want to POST:<576f726b 2c206461 6d6e2079 6f7521>
2010-10-04 14:10:16.673 iWish[38743:207] serverReply:
在我看来,数据是存在的,并且格式化了,但由于某种原因没有被发送或接收。这里希望代码中某处有一些愚蠢的错误,因为我已经盯着这两天了。
我很感激任何帮助。谢谢!
答案 0 :(得分:3)
使用fwrite
,您只能编写字符串,而var_dump不会返回字符串。
并且......,json_decode
不起作用,因为您的帖子请求不是有效的JSON。
所以,我认为这对你有用:
$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = json_encode($_POST);
fwrite($fh, $stringData);
fclose($fh);