Passing variables from PHP to AJAX success function

ajax, javascript, jquery, php, wordpress

Solution

You shoud encode the response of the php script as json, as follows:

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

}

And then, in your javascript code:

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

Problem

My aim is to update a WordPress post using AJAX. My code so far: Script: ``` $.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; } } ``` As you can see the `$response` variable in my PHP function is being passed to the success function in my script and the value of `$response` is displayed on the page. I want to modify my success function to do something like this: ``` success: function( data ) { if( $error == 'true' ) { // do something } else { // do something else } }, ``` The problem is, I am having trouble passing both the `$response` and `$error` variables in my PHP function to the success function in my scipt. - Can anyone let me know how to pass `$response` and `$error` to my script's success function? - Is there a better approach I should be taking? I'm newish to AJAX so forgive me if the question is very basic.

Original source