2012-08-30 14 views
5

sólo quiero ahorrar algo de JSON (generado con Javascript) en un archivo en el servidor. Pero aun no entiendo que funcione con una cadena simple: ArchivoGuardar datos en archivo a través de Ajax POST y PHP

HTML:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<style> 
#test{ 
padding:20px 50px; 
background:#ccc; 
color:#000; 
} 
</style> 
<script> 
$(function(){ 
$('#test').click(function(){ 
    $.ajax({ 
     url: "page.php", 
     data: {"foo": "bar"}, 
     processData: false, 
     contentType: 'application/json' 
    }); 

}); 
}); 
</script> 
</head> 
<body> 

<div id="test"> 
KLICK 
</div> 
</body> 
</html> 

y el archivo PHP es algo como esto:

<?php 
$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w'); 
fwrite($fh,$_POST['data']); 
fwrite($fh,$_POST['foo']); 
fwrite($fh,$_POST["foo"]); 
fwrite($fh,$_POST[foo]); 
fclose($fh); 

Nada funcionó. También probé

$.ajax({ 
    var datatosend="foo bar"; 
    url: "page.php", 
    data: datatosend, 
    processData: false 
    }); 

No sé lo que podría estar mal. El archivo txt está allí después de hacer clic en div en el archivo html. Pero no hay contenido en el archivo. Si sólo escribo $ _POST al archivo de texto, el archivo contiene el texto "Matriz", lo que significa que $ _POST tiene algo de contenido.

Respuesta

2

Pocas cosas podrían ir mal aquí. Verifique los permisos en el directorio en el que está intentando escribir. También asegúrese de que su llamada ajax esté usando el método POST.

$.ajax({ 
    url: "page.php", 
    type : 'POST', 
    ... 
}); 

Como saciado en el jQuery documentation, el parámetro Tipo Define el tipo de solicitud, POST o GET.

El tipo de solicitud para hacer ("POST" o "GET"), por defecto es "GET".


Otra cosa a tener en cuenta es que usted no está realmente escribir datos JSON. Los datos se envían en ese formato, pero cuando se pone a la variable $_POST se ha convertido en una matriz. Lo que debe intentar hacer es escribir una matriz PHP en el fichero -

$fh = fopen($myFile, 'w'); 
fwrite($fh,'<?php $arr='.var_export($_POST['data'],true).' ?>'); 
fclose($fh); 

que debe dar un archivo similar a esto -

<?php 
    $arr = array(
    'foo'=>'bar' 
) 
?> 

Como se puede ver, la función var_export() devuelve una versión apta para su procesamiento de La variable.

var_export - Imprime o devuelve una representación de cadena, apta de una variable

+0

Probé también el tipo "POST" y el código con var_export. Nada funcionó para mí. La salida con var_export era Jens

+0

¿Estás seguro de eso? $ _POST ['data'] 'contiene los datos reales? Es posible que también desee activar el informe de errores para ver si hay excepciones subyacentes ... – Lix

+0

Estoy seguro de eso;) ¿Qué quiere decir con informes de errores? Si escribo 'error_reporting (E_ALL);' en el archivo php y solo abro el archivo php en el navegador, me dice 'Aviso: Índice indefinido: datos en ...' y así sucesivamente. Pero tiene que ser así, porque si abro directamente el archivo php $ _POST tiene que ser NULL. – Jens

0

Necesitas hacer una llamada POST, ver más abajo:

$('#test').click(function(){ 
    $.ajax({ 
     url: "page.php", 
     type : 'post', 
     data: {"foo": "bar"}, 
     processData: false, 
     contentType: 'application/json' 
    }); 

}); 
+0

Oh sí, olvidaron que en el ejemplo anterior. Pero eso tampoco funciona :( – Jens

0

Por defecto, todos los .ajax $() las solicitudes se envían utilizando el GET método, no POST.Tendrá que especificar el tipo como 'post':

$.ajax({ 
    var datatosend="foo bar"; 
    url: "page.php", 
    type: 'post', 
    data: datatosend, 
    processData: false 
    }); 

De la documentación:

tipo - Cadena

defecto: 'GET'

El tipo de solicitud para hacer ("POST" o "GET"), el valor predeterminado es "GET". Nota: También se pueden usar otros métodos de solicitud HTTP, como PUT y DELETE, , pero no son compatibles con todos los navegadores.

0

puede ser que debe ser

$.ajax({ 
    url: "page.php", 
    type: "POST", // add this 
    data: {"foo": "bar"}, 
    processData: false, 
    contentType: 'application/json' 
}); 

O

en PHP utilizan $_REQUEST en lugar de $_POST

Cuestiones relacionadas