Pasar variables de PHP a la función de éxito de AJAX

5 minutos de lectura

Mi objetivo es actualizar una publicación de WordPress usando AJAX. Mi código hasta ahora:

Guion:

$.ajax({
    type: 'POST',
    url: ajax_url,
    data: {
        'action': 'wp_post',
        'ID': post_id,
        'post_title': post_title
},
success: function( data ) {
        $( '.message' )
        .addClass( 'success' )
        .html( data );
},
error: function() {
        $( '.message' )
        .addClass( 'error' )
        .html( data );
    }       
});

PHP:

function wp_post() {

    $post['ID'] = $_POST['ID'];
    $post['post_title'] = $_POST['post_title'];
    $post['post_status'] = 'publish';

    $id = wp_update_post( $post, true );

    if ( $id == 0 ) {
        $error="true";
        $response="This failed";
        echo $response;
    } else {
        $error="false";
        $response="This was successful";
        echo $response;
    }

}

Como puedes ver el $response La variable en mi función PHP se pasa a la función de éxito en mi script y el valor de $response se muestra en la página.

Quiero modificar mi función de éxito para hacer algo como esto:

success: function( data ) {
    if( $error == 'true' ) {
        // do something
    } else {
        // do something else
    }
},

El problema es que tengo problemas para pasar tanto el $response y $error variables en mi función PHP a la función de éxito en mi scipt.

  1. Alguien me puede decir como pasar $response y $error a la función de éxito de mi script?
  2. ¿Hay un mejor enfoque que debería tomar?

Soy nuevo en AJAX así que perdónenme si la pregunta es muy básica.

  • ¿Por qué no usa el código de resultado http estándar en lugar de reinventar un protocolo encima de un protocolo?

    – njzk2

    07/01/2014 a las 15:50

  • Gracias njzk2, como dije, soy nuevo en AJAX. ¿Alguna posibilidad de que pueda proporcionar un ejemplo de cómo hacer eso?

    – henry wright

    07/01/2014 a las 15:51

  • Codifique la respuesta como objeto JSON. Verificar json_encode en PHP y JSON.parse en JavaScript.

    – elclanrs

    07/01/2014 a las 15:52


  • usar php.net/manual/en/function.http-response-code.php para establecer un código de falla, que lo llevará a la función de error de ajax.

    – njzk2

    7 de enero de 2014 a las 15:57

  • njzk – gracias, echaré un vistazo

    – henry wright

    07/01/2014 a las 16:31

Debe codificar la respuesta del script php como json, de la siguiente manera:

function wp_post() {

    $post['ID'] = $_POST['ID'];
    $post['post_title'] = $_POST['post_title'];
    $post['post_status'] = 'publish';

    $id = wp_update_post( $post, true );

    $response = array();

    if ( $id == 0 ) {
        $response['status'] = 'error';
        $response['message'] = 'This failed';
    } else {
        $response['status'] = 'success';
        $response['message'] = 'This was successful';
    }

    echo json_encode($response);

}

Y luego, en su código javascript:

success: function( data ) {
    if( data.status == 'error' ) {
        // error handling, show data.message or what you want.
    } else {
        // same as above but with success
    }
},

  • Gracias taxicala. ¿Necesito agregar un tipo de datos a mi $.ajax()?

    – henry wright

    7 de enero de 2014 a las 16:18

  • Es mejor si lo haces 🙂 ¡Me alegro de haberte ayudado!

    – taxicala

    7 de enero de 2014 a las 17:24

  • Si no agrega un tipo de datos, jquery no sabrá si es json. También puede hacer esto en la parte superior de su script php con header('content-type: text/json');

    –Kurt Van den Branden

    30 de septiembre de 2017 a las 10:46


Puedes crear un JSON matriz como esta, en el backend:

$arr = array('error' => true, 'something' => 'foo');
echo json_encode($arr);

Y luego analice la matriz json para obtener los valores devueltos, así:

success: function( data ) {
    var error="";
    var something = '';
    for(var i = 0; i < data.length ; i++)
    {
        error = data[i].error;
        something = data[i].something;
    }
    if( error ) {
        // do something
    } else {
        // do something else
    }
},

Mientras que hizo eco de la matriz desde el backend hasta el frontend, no puede simplemente acceder a las variables de PHP dentro de JavaScript.

Tenga en cuenta que puede haber un error de sintaxis, ya que no lo estoy probando.

  • Si está pasando una sola cadena en su php, es absolutamente innecesario pasar por todo el proceso json siempre que su función javascript ajax solicite los datos devueltos en html.

    – pionero

    7 de enero de 2014 a las 16:19

  • pionero: estoy tratando de pasar 2 cuerdas. $respuesta y $error

    – henry wright

    07/01/2014 a las 16:20

  • sin embargo, solo necesita uno, es bueno o es malo. ¿Por qué inflar el código? Pero ustedes pueden tener los puntos. Volveré a ganar dinero con mi código compacto ahora. Realmente odio en lo que se ha convertido el desbordamiento de pila. Ahora es como un videojuego.

    – pionero

    7 de enero de 2014 a las 16:24

  • pionero – No, necesito 2. Necesito ‘es bueno o malo’ Y ‘el mensaje’

    – henry wright

    7 de enero de 2014 a las 16:26

  • Puedes enviar tantas variables como quieras, ¿cuál es el problema, Henry?

    – Jonast92

    07/01/2014 a las 16:30


lo que buscas es json_encode()

Esto convierte una matriz de PHP a JSON.

Por ejemplo:

$dataArray = array( 'message' => 'Error', 'data' => data);
echo json_encode($dataArray);   

  • la tuya ni siquiera responde a su pregunta. para que molestarse en criticar. Hace que stackoverflow sea una molestia total en mi vida.

    – pionero

    07/01/2014 a las 16:00

  • la pregunta es: “Quiero modificar mi función de éxito para hacer algo como esto:”

    – pionero

    7 de enero de 2014 a las 16:16

  • El desbordamiento de pila no se trata de proporcionar un código que funcione al 100%, aunque es bueno cuando es posible, y esto es lo que OP está buscando, no es gran cosa si tiene que investigar un poco sobre lo que se le ha dado.

    – Jonast92

    7 de enero de 2014 a las 16:16

  • Phil y tú le están diciendo que haga pasos innecesarios.

    – pionero

    07/01/2014 a las 16:20

No puede usar directamente variables de PHP dentro de JavaScript. Lo mejor que puede hacer es manipular la salida PHP en su código JavaScript.

Por ejemplo, podrías imprimir $response como ‘error’ o ‘no_error’ – y en su devolución de llamada AJAX, verifique que var data no es igual a ‘error’ (por ejemplo).

si utiliza:

echo json_encode($response);

en su función .php, recuerde usar:

var data = $.parseJSON(data);

en su éxito ajax.

Ejemplo:

function php_ajax_function() {

    // whatever you want to do...

    $response = array();

    if ( $id == 0 ) {
        $response['status'] = 'error';
        $response['message'] = 'This failed';
    } else {
        $response['status'] = 'success';
        $response['message'] = 'This was successful';
    }

    echo json_encode($response);
}

Y luego, en su código javascript:

success: function( data ) {

    console.log(data);

    var data = $.parseJSON(data);

    if( data.status == 'error' ) {
        // do something
    } else {
        // do other thing
    }
}

avatar de usuario
pionero

los datos de la variable javascript contienen su variable $response repetida. Entonces, usando tu ejemplo, sería algo como esto. Asegúrese de que también está solicitando html como datos de retorno en la función ajax. aquí están los documentos sobre eso: http://api.jquery.com/jquery.ajax/

success: function( data ) {
    if( data == 'This failed' ) {
        // do something
    } else {
        // do something else
    }
},

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad