2010-10-04 25 views
5

Her zaman olduğu gibi forumlarda arama yaptım ve yanlış yaptığım şeyi anlayamadan kendimi biraz delirttim. Bu yüzden bu siteyi sıkça ziyaret eden büyük zihinlere bir cevap bulmayı umuyorum. Bir veritabanı ile iletişim kuracak bir uygulama yapıyorum ve bunu yaparken, çeşitli çevrimiçi örnekler kullanarak iPhone aracılığıyla veri tabanına veri almak ve veriyi iPhone'a göndermek için JSON'u kullanmayı öğrenmeye çalışıyorum. JSON kullanarak web'den veri almayı ve bir tablo görünümünde göstermeyi başardım, ancak POST verilerini denediğimde hiçbir şey işe yaramıyor gibi görünüyor. Temel olarak aldığım verileri bir metin dosyasına yazması gereken basit bir php-script'im var (aşağıya bakınız).JSON verilerini basit bir textfile'a yazıyor

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

Sorun, komut dosyasının hiçbir şey almıyor gibi görünüyor. Ona yazarken, buna benzeyen bir dosya oluşturur. Bu yüzden dosyayı yaratıyor ve her şeyde sadece bir şey yok.

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

Aşağıdaki kod XCode'daki POST yöntemimdir.

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

yöntemi tetikleme ve boş bir metin dosyası dışarı yazarken konsol şuna benzer:

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: 

Veri olduğunu bana öyle geliyor, ve biçimlendirilmiş ve etajer ama nedense olduğunu gönderilmiyor veya alınmıyor. Şu anda kodda bir yerde aptalca bir hata olduğunu umuyoruz, çünkü şu an iki gündür bakıyorum.

Herhangi bir yardım için minnettar olurum. Teşekkürler!

cevap

3

fwrite ile yalnızca dizeleri yazabilirsiniz ve var_dump bir dizge döndürmez. Ve ..., json_decode çalışmıyor, çünkü posta isteğiniz geçerli JSON değil. cevap için

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

Teşekkür:

Yani, bu sizin için çalışacaktır düşünüyorum. Kodu denedim ama sadece metin dosyasında [] yazıyor. Posta isteğimin geçerli bir JSON olmadığını belirttiniz. Neden? Neyi kaçırıyorum? – Glitch

+0

Hayır .., json_decode kullanmak istiyorsanız (örneğinizde) POST isteği JSON biçiminde de olmalıdır (.. çok uzak XCode okuyabilir, değil). $ _POST varlığını $ _GET var olarak değiştirirseniz ve http: // localhost: 8888/iWish/json_post.php? Var = test & var2 = example olarak adlandırılırsa ne olur? Test dosyanızda geçerli bir JSON-string görüyor musunuz? –

+0

$ _POST değerini $ _GET olarak değiştirir ve localhost'u çağırırsam: 8888/iWish/json_post.php? Var = test & var2 = example yazılan test dosyası şuna benzer: {"var": "test", "var2": "örnek"}. – Glitch

İlgili konular