如何在Ajax发布后检索json编码数据

时间:2014-04-06 10:51:33

标签: javascript php jquery ajax json

我正在使用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"])

但似乎都不起作用?

3 个答案:

答案 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,以下是一个例子:

enter image description here

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