我正在使用ajax帖子提交数据以进行验证并存储在数据库中。如果数据失败,服务器端验证错误消息将被json编码并发送回如下:
$errorArray = array();
if (!empty($nameErr)) {
$errorArray["nameErr"] = $nameErr;
}
if (!empty($emailErr)) {
$errorArray["emailErr"] = $emailErr;
}
if (!empty($phoneErr)) {
$errorArray["phoneErr"] = $phoneErr;
}
if (!empty($commentErr)) {
$errorArray["commentErr"] = $commentErr;
}
$data = json_encode($errorArray);
echo $data;
然后在我的ajax帖子的成功回调中,我将显示这些错误,我的问题是如何访问在json编码函数中发送的这些消息?
我试过了
error.response['nameErr']
和
error.response('errorArray["nameErr"])
但似乎都不起作用?
答案 0 :(得分:1)
我认为你想要的是在你的PHP中有一个头部声明,以便返回的文本被读作json。
在这种情况下,您还需要将ajax数据类型设置为json,以便准备接收json。
你的ajax请求的成功函数只是一个if语句,如果data.Error
为false,你就遇到了问题,你可以继续阅读你自己记录的data.ErrorMessage
服务器端。
<强> JavaScript的:强>
var requestObject = { Property1 = "Hi" };
$.ajax({
url: myUrl,
method: "post",
data: requestObject,
dataType: "json",
success: function( data )
{
if( data.Error )
{
HandleError( data.ErrorMessage );
}
else
{
// Do stuff with data.Response
}
}
error: function( e )
{
alert( JSON.stringify( e ) ); // This usually relates to server side errors, 404 not founds etc... so this function will not magically know that your validation failed... Although you could perhaps throw a PHP fatal error...
}
});
<强> PHP:强>
if( $_POST[ "Property1" ] != "sausage" )
{
header('Content-Type: application/json'); // This line will make your ajax be okay with the json response
$response = array(
"Error" => TRUE,
"ErrorMessage" => array( "Hey that doesn't equal sausage" ),
"Response" => false
);
echo json_encode( $response );
}
在你的情况下,有一个错误数组并填充它们,因为没有正确传递位...例如:
$errors = array();
if( /* condition */ )
$errors[] = "Error message 1";
if( /* condition */ )
$errors[] = "Error message 2";
if( count( $errors ) > 0 )
$response = array(
"Error" => TRUE,
"ErrorMessage" => $errors,
"Response" => false // Nothing to send back because there were errors
);
echo json_encode( $response );
<强> P.S 强>
如果您在获取所需的错误消息或响应时遇到问题。不要忘记查看您最喜欢的开发人员工具栏中的网络选项卡...挖掘IE11,以下是一个例子:
答案 1 :(得分:0)
我认为,你的意思是在javascript中解析json。
为此您需要:
JSON.parse('json');
或
如果您使用的是jquery,您也可以这样做:
$.parseJSON('json');
两者都将返回从JSON解析的对象。
答案 2 :(得分:0)
这是一个简单的json all:
$.getJSON("serverpage.php", { form_data })
.done(function (data) {
console.log(data);
});
})
.fail(function (jqxhr, textStatus, error) {
console.log(error);
});