将变量从PHP传递到AJAX成功函数

时间:2014-01-07 15:48:26

标签: javascript php jquery ajax wordpress

我的目标是使用AJAX更新WordPress帖子。到目前为止我的代码:

脚本:

$.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;
    }

}

正如您所看到的,PHP函数中的$response变量正在我的脚本中传递给success函数,并且页面上显示$response的值。

我想修改我的成功函数来做这样的事情:

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

问题是,我无法将PHP函数中的$response$error变量传递给我的scipt中的success函数。

  1. 有人可以告诉我如何将$response $error传递给我的脚本的成功函数吗?
  2. 我应该采取更好的方法吗?
  3. 我对AJAX很新,请原谅我,如果这个问题非常基础。

6 个答案:

答案 0 :(得分:10)

你应该将php脚本的响应编码为json,如下所示:

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

}

然后,在您的javascript代码中:

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

答案 1 :(得分:2)

您可以在后端创建一个JSON数组,如下所示:

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

然后解析json数组以获取返回的值,如下所示:

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
    }
},

当你从后端到前端回显数组时,你不能简单地在JavaScript中访问PHP变量。

请注意,可能存在语法错误,因为我没有测试它。

答案 2 :(得分:1)

您要找的是json_encode()

这会将PHP数组转换为JSON。

例如:

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

答案 3 :(得分:0)

您无法在JavaScript中直接使用PHP变量。您可以做的最好的事情就是在JavaScript代码中操作PHP输出。

例如,您可以将$response打印为'error'或'no_error' - 并在您的AJAX回调中,检查var data是否不等于'错误'(例如)。

答案 4 :(得分:0)

如果您使用:

echo json_encode($response);

在.php函数上,记得使用:

var data = $.parseJSON(data);

关于你的ajax成功。

示例:

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

然后,在您的javascript代码中:

success: function( data ) {

    console.log(data);

    var data = $.parseJSON(data);

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

答案 5 :(得分:-2)

javascript变量数据包含echoed $ response变量。所以使用你的例子,它会是这样的。请确保您还要求将html作为ajax函数中的返回数据。这是关于它的文档:http://api.jquery.com/jquery.ajax/

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