2010-10-04 41 views
5

Như thường lệ, tôi đã tìm kiếm các diễn đàn và googled bản thân mình hơi điên mà không thể tìm ra những gì tôi đang làm sai. Vì vậy, tôi chuyển sang tâm trí tuyệt vời thường xuyên trang web này với hy vọng sẽ tìm thấy một câu trả lời. Tôi đang xây dựng một ứng dụng sẽ liên lạc với cơ sở dữ liệu và làm như vậy tôi đang cố gắng tìm hiểu cách sử dụng JSON để truy xuất và đăng dữ liệu lên cơ sở dữ liệu thông qua iPhone, sử dụng các ví dụ khác nhau được tìm thấy trực tuyến. Tôi đã quản lý để lấy dữ liệu từ web bằng cách sử dụng JSON và hiển thị nó trong một khung nhìn, tuy nhiên khi tôi cố gắng POST dữ liệu không có gì làm việc, có vẻ như. Về cơ bản tôi có một tập lệnh php đơn giản nên ghi dữ liệu mà nó nhận được vào một tệp văn bản (xem bên dưới).Viết dữ liệu JSON vào một văn bản đơn giản

<?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); 
?> 

Vấn đề là tập lệnh dường như không nhận được bất kỳ thứ gì. Khi đăng lên nó, nó tạo ra một tập tin trông như thế này. Vì vậy, nó tạo ra các tập tin và tất cả nhưng không có gì trong đó.

=== JSON Decoded ====== JSON Decoded === 

Mã bên dưới là phương thức POST của tôi trong XCode.

-(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); 
} 

Giao diện điều khiển trông như thế này khi kích hoạt phương pháp và viết ra các tập tin văn bản trống:

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: 

Dường như với tôi rằng các dữ liệu ở đó, và định dạng và không có điều gì nhưng đối với một số lý do là không nhận được gửi hoặc nhận. Đây là hy vọng chỉ có một số lỗi ngu ngốc ở đâu đó trong mã kể từ khi tôi đã nhìn chằm chằm vào điều này trong hai ngày nay.

Tôi đánh giá cao bất kỳ trợ giúp nào. Cảm ơn!

Trả lời

3

Với fwrite bạn chỉ có thể viết chuỗi và var_dump không trả lại chuỗi. Và ..., json_decode không hoạt động, vì yêu cầu bài đăng của bạn không phải là JSON hợp lệ.

Vì vậy, tôi nghĩ rằng điều này sẽ làm việc cho bạn:

$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = json_encode($_POST); 
fwrite($fh, $stringData); 
fclose($fh); 
+0

Cảm ơn bạn đã trả lời. Tôi đã thử mã nhưng nó chỉ viết ra [] trong textfile. Bạn đã đề cập rằng yêu cầu bài đăng của tôi không phải là JSON hợp lệ. tại sao vậy? Tôi đang thiếu gì? – Glitch

+0

Không .., nếu bạn muốn sử dụng json_decode (trong ví dụ của bạn), yêu cầu POST cũng phải ở định dạng JSON (..cũng đến mức tôi có thể đọc XCode, nó không phải là). Điều gì xảy ra nếu bạn thay đổi $ _POST var thành $ _GET var và gọi http: // localhost: 8888/iWish/json_post.php? Var = test & var2 = example? Bạn có thấy chuỗi JSON hợp lệ trong tệp thử nghiệm của mình không? –

+0

nếu tôi thay đổi $ _POST thành $ _GET và gọi localhost: 8888/iWish/json_post.php? Var = test & var2 = example thì tệp kiểm tra được viết ra như sau: {"var": "test", "var2": "thí dụ"}. – Glitch

Các vấn đề liên quan