将JSON数据写入简单的文本文件

时间:2010-10-04 12:18:37

标签: php iphone json post

一如既往,我一直在搜索论坛,用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:

在我看来,数据是存在的,并且格式化了,但由于某种原因没有被发送或接收。这里希望代码中某处有一些愚蠢的错误,因为我已经盯着这两天了。

我很感激任何帮助。谢谢!

1 个答案:

答案 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);