Javascript 将变量从PHP传递到AJAX成功函数
我的目标是使用AJAX更新WordPress帖子。到目前为止,我的代码是: 脚本:Javascript 将变量从PHP传递到AJAX成功函数,javascript,php,jquery,ajax,wordpress,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' ) .a
$.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 );
}
});
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:
$.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 );
}
});
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
}
},
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
}
},
问题是,我无法将PHP函数中的$response
和$error
变量传递到scipt中的success函数
$response
和$error
传递给脚本的成功函数吗我是AJAX新手,如果问题很简单,请原谅。javascript变量数据包含您的回音$response变量。以你的例子来说,是这样的。确保在ajax函数中也要求使用html作为返回数据。以下是关于这方面的文件:
你要找的是 这会将PHP数组转换为JSON 例如:
$dataArray = array( 'message' => 'Error', 'data' => data);
echo json_encode($dataArray);
不能在JavaScript中直接使用PHP变量。您所能做的最好的事情就是在JavaScript代码中操纵PHP输出
例如,您可以将
$response
打印为“error”或“no_error”-并在AJAX回调中检查var data
是否不等于“error”(例如)。您可以在后端创建一个类似于此的JSON
数组:
$arr = array('error' => true, 'something' => 'foo');
echo json_encode($arr);
然后解析json数组以获取返回值,如下所示:
success: function( data ) {
if( $error == 'true' ) {
// do something
} else {
// do something else
}
},
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
}
},
成功:函数(数据){
var错误=“”;
var某物=“”;
对于(变量i=0;i
当您将数组从后端回显到前端时,您不能简单地访问JavaScript中的PHP变量
请注意,可能存在语法错误,因为我没有测试它。您应该将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
}
},
success: function( data ) {
console.log(data);
var data = $.parseJSON(data);
if( data.status == 'error' ) {
// do something
} else {
// do other thing
}
}
如果您使用:
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 ) {
if( data.status == 'error' ) {
// error handling, show data.message or what you want.
} else {
// same as above but with success
}
},
success: function( data ) {
console.log(data);
var data = $.parseJSON(data);
if( data.status == 'error' ) {
// do something
} else {
// do other thing
}
}
为什么不使用标准的http结果代码,而不是在协议的基础上重新创建协议呢?谢谢njzk2——正如我所说,我对AJAX是新手。有没有可能提供一个示例来说明如何执行此操作?将响应编码为JSON对象。查看PHP中的
json\u encode
和JavaScript中的json.parse
。用于设置失败代码,这将使您进入ajax错误函数。njzk-谢谢,我会看一看,这对我来说非常好,我一直使用此方法。既然我有html格式,我就不必使用json或其他任何东西,我只需要从php传递一条语句,它就工作得很好。嗨,pathfinder,谢谢你的帮助。当我只需要一个变量时,我会记住你的方法。很好,很简单。数据是一个对象,而不是一个字符串。如果您希望,数据就是一个字符串。如果你看一下原始的php,他传递的是一个简单的字符串。我的功能运行正常,你们都会不假思索地点击。你的也可以,但它会使代码膨胀。如果你说这个答案是错误的,那么你就限制了你努力做正确的事情的可能性。你的答案甚至没有回答他的问题。为什么要批评呢。这让stackoverflow成为我生活中的一大烦恼。问题是:“我想修改我的成功函数来做这样的事情:“Stack Overflow并不是要给出100%的工作代码,即使它在可能的情况下是很好的,而这正是OP想要的,如果他必须对给他的小费做一些研究,这没什么大不了的。你和phil告诉他要做不必要的步骤。谢谢taxicala-我需要在我的$.ajax()中添加数据类型吗?如果你这样做会更好:)很高兴我能帮到你!如果不添加数据类型,jquery将不知道它是否是json。您还可以在php脚本的顶部使用标题('content-type:text/json')执行此操作
如果要在php中传递一个字符串,则完全没有必要遍历整个json过程,只要javascript ajax函数要求返回html.pathfinder中的数据,我将尝试传递两个字符串$回答和$error他只需要一个,不管是好是坏。为什么代码膨胀?但你们可以抓住要点。现在,我将继续使用紧凑的代码赚钱。我真的很讨厌堆栈溢出的情况。它现在就像一个电子游戏。探路者-不,我需要2。我需要“它是好是坏”和“信息”,你可以发送任意多的变量,亨利,有什么问题吗?