我的目标是使用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函数。
$response
和 $error
传递给我的脚本的成功函数吗?我对AJAX很新,请原谅我,如果这个问题非常基础。
答案 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
}
},