Cree un archivo XML en el servidor usando SimpleXML y jQuery Ajax

Lo que quiero hacer seguramente se puede lograr, pero estoy haciendo algo mal: quiero crear un archivo XML cuando uso una llamada Ajax. Obtuve el siguiente código (sintetizado). Tal vez este ejemplo no funcione, es solo para ejemplificar:

HTML

<html>
<head>
  <!-- JQuery 1.7 included -->  
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" type="text/javascript"></script>
</head>
<body>
  <p>Create XML on server!</p>
  <form id="prog" method="POST">
    <input type="text" id="test" />
    <button id="submit" type="submit"> Create now! </button>
  </form>
  <script>
    jQuery.noConflict();
    jQuery(document).ready(function($){
        var test = $('#test').val();
 
        // When the button it's clicked:
        $('#submit').click(function () {
            $.ajax({
                // Este es el archivo PHP que procesa la información y envía el mail
                url: "createXML.php",
                type: "POST",
                data: test,
                success: function (html) {
                    // If succeed
                    if (html==1) {
                        alert("DONE!!");
                    }
                }
            });
        });
         
        // With this I cancel the default behaviour of the button so it doesn't submit by itself.
        return false;
    });

</script>
</body>
</html>

PHP en el servidor

<?php
    echo "HI! Ajax arrived here and this code it's being executed!";
    
    //I load a string to be the contents of the XML file
    $exemel = simplexml_load_string('<example><simple>As simple as this!</simple></example>');
    
    // I save the file as following:
    $exemel->asXml('xml/DONE.xml');
    echo 1;
?>

En este ejemplo, el código PHP funciona tal cual, el otro no. Pero en todo el contexto de mi código, la llamada Ajax funciona, no tengo ninguna duda, ya que hace todo lo demás que debe, solo la creación del código XML no lo hace. Teniendo el mismo código PHP que aquí, si hago la llamada Ajax, el archivo no se crea. Si en una consola lo hago

php createXML.php

El archivo XML se creó con éxito. Entonces no es el código PHP y al mismo tiempo no es un error en mi llamada Ajax porque hace todo lo que debería. ¿Qué podría estar pasando?

Editar

En mi código real, en el archivo PHP en el servidor, hago esto:

$test = (isset($_GET['test'])) ? $_GET['test'] : null;
//If something fails, I add the error to an errors array:
$errors = array();
isset($errors);
if (!$test) $errors[count($errors)] = 'Something failed with the test!';
//If there are any errors
if (!$errors) {
    createXML ();
}

Esa función createXML() contiene mi código anterior.

preguntado el 12 de junio de 12 a las 17:06

2 Respuestas

prueba este

$xml = simplexml_load_string($_POST['test']);
if(file_put_contents("xmlfile.xml",$xml->asXML())){
 echo "xml file created successfully";
}else{
 echo "failed to create file";
}

también en el lado de php no haces nada con $_POST['test'] ? donde esta la cadena xml..

Respondido el 12 de junio de 12 a las 17:06

Hago más cosas pero estoy tratando de simplificar tanto como sea posible. Su forma de verificar si el archivo se creó o no es útil, sin embargo, en mi código "no se pudo crear el archivo". Me pregunto por qué si se ejecuta directamente sin Ajax solo en la consola con PHP, se ejecuta bien ... ¿Alguna idea? GRACIAS POR SU AYUDA =) - Metafaniel

Estoy tan avergonzado uu El código que obtuve funcionaba bien, pero la carpeta donde escribir el archivo no tenía permisos para el usuario =/ Lo siento... Verifiqué dos veces esto, sin embargo, incluso con un chmod 777 pude no lo hagas Era un problema en los permisos con el grupo del usuario... Lo siento y gracias por ayudarme. Cambiar permisos a la carpeta en Linux

respondido 20 mar '17, 10:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.