2010-10-04 64 views
5

与往常一样,我搜索论坛,并搜索我的自己有点疯狂,但无法弄清楚我做错了什么。因此,我转向期待这个网站的伟大思想,希望找到答案。 我正在构建一个将与数据库进行通信的应用程序,并试图通过使用在线发现的各种示例来学习如何使用JSON检索数据并将其发布到数据库。我设法使用JSON从Web上检索数据并在TableView中显示它,但是当我尝试POST数据时没有任何效果。基本上,我有一个简单的php脚本,它应该将它接收到的数据写入文本文件(见下文)。写出JSON数据到一个简单的文本文件

<?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: 

在我看来,数据是存在的,并格式化和诸如此类的东西,但由于某些原因没有得到发送或接收。这里希望在代码中有一些愚蠢的错误,因为我现在已经注意了两天了。

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

回答

3

With 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); 
+0

感谢您的答复。我尝试了代码,但它只在文本文件中写出[]。你提到我的帖子请求不是有效的JSON。这是为什么?我错过了什么? – Glitch 2010-10-04 13:11:38

+0

不,如果你想使用json_decode(在你的例子中),POST请求也必须以JSON格式(..so远是我可以读取XCode,它不是)。 如果将$ _POST var更改为$ _GET var,并调用http:// localhost:8888/iWish/json_post.php?var = test&var2 = example?会发生什么?你在你的测试文件中看到有效的JSON字符串吗? – 2010-10-04 13:23:17

+0

如果我将$ _POST更改为$ _GET并调用localhost:8888/iWish/json_post.php?var = test&var2 = example,则写出的测试文件如下所示:{“var”:“test”,“var2”: “例”}。 – Glitch 2010-10-05 09:34:38