2010-10-04 16 views
5

Como siempre, he buscado en los foros y busqué en Google mi ser un poco loco sin poder darme cuenta de lo que estoy haciendo mal. Por lo tanto, recurro a las grandes mentes que frecuentan este sitio con la esperanza de encontrar una respuesta. Estoy construyendo una aplicación que se comunicará con una base de datos y al hacerlo estoy tratando de aprender a usar JSON para recuperar y publicar datos en la base de datos a través del iPhone, usando varios ejemplos que se encuentran en línea. Logré recuperar datos de la web usando JSON y mostrándolos en una vista de tabla, sin embargo, cuando intento enviar datos, parece que nada funciona. Básicamente, tengo un script php simple que debe escribir los datos que recibe en un archivo de texto (ver a continuación).Escribiendo datos JSON en un simple archivo de texto

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

El problema es que el script parece no recibir nada. Al publicar en él, crea un archivo que se ve así. Entonces crea el archivo y todo, pero no hay nada en él.

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

El código siguiente es mi método POST en 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); 
} 

La consola tiene este aspecto cuando se dispara el método y escribir el archivo de texto vacío:

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: 

Me parece que los datos están ahí, y con formato y todo eso, pero por alguna razón es no ser enviado ni recibido Aquí está la esperanza de que haya un error estúpido en algún lugar del código ya que he estado mirando esto durante dos días.

Agradecería cualquier ayuda. ¡Gracias!

Respuesta

3

Con fwrite solo puede escribir cadenas, y var_dump no devuelve una cadena. Y ..., json_decode no funciona, porque su solicitud de publicación no es válida JSON.

Por lo tanto, creo que esto va a funcionar para usted:

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

Gracias por la respuesta. Probé el código pero solo escribe [] en el archivo de texto. Usted mencionó que mi solicitud posterior no es válida JSON. ¿porqué es eso? ¿Qué me estoy perdiendo? – Glitch

+0

No .., si desea utilizar json_decode (en su ejemplo), la solicitud POST también debe estar en formato JSON (... hasta ahora puedo leer XCode, no lo está). ¿Qué sucede si cambia la $ _POST var a una $ _GET var, y llama a http: // localhost: 8888/iWish/json_post.php? Var = test & var2 = example? ¿Ves cadena JSON válida en tu archivo de prueba? –

+0

si cambio $ _POST a $ _GET y llamo a localhost: 8888/iWish/json_post.php? Var = test & var2 = example, entonces el archivo de prueba que se escribe tiene el siguiente aspecto: {"var": "test", "var2": "ejemplo"}. – Glitch