【问题标题】:How to retrieve json encoded data after an Ajax post如何在 Ajax 发布后检索 json 编码数据
【发布时间】:2014-04-06 10:51:33
【问题描述】:

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

但似乎都不起作用?

【问题讨论】:

  • 你在使用 jquery 进行 ajax 调用吗?
  • 我们需要你的JS代码,以及neither seem to work的含义
  • 假设您从 PHP 脚本发送正确的内容类型标头,success 回调函数的第一个参数将包含预期的数据。
  • 您的dataType 是否设置为json?如果不在返回对象上使用jQuery.parseJSON,您可以将其访问为response.nameErr
  • 我正在使用 jquery 并且无法将 dataType 设置为 json,因为它不会运行成功回调

标签: javascript php jquery ajax json


【解决方案1】:

我认为你想要的是在你的 PHP 中有一个标头声明,以便返回的文本被读取为 json。

在这种情况下,您还需要将您的 ajax 数据类型设置为 json,以便它准备接收 json。

你的ajax请求成功函数只是做一个if语句,如果data.Error是假的,你就有问题了,你可以继续阅读你自己记录的服务器端的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 );

附言

如果您在获取所需的错误消息或响应时遇到问题。不要忘记查看您最喜欢的开发人员工具栏中的网络选项卡...挖掘 IE11,所以这里有一个示例:

【讨论】:

  • 无解释,与 OP 的代码无关。这有什么帮助?
  • @ICanHasCheezburger - 当您发布此内容时,我仍在输入我的答案(您必须耐心等待)。答案是 OPs 问题的完整解决方案。
  • 好的,所以在说如果我将数据类型更改为 json 将无法正常工作之后,我将其更改为 json,我现在可以使用我在成功回调中编码的 json 错误! :) 我认为我错过了关于 ajax 帖子的整个 dataType 的一些非常重要的内容,因为现在即使我可以使用通过发送的数据,我现在也无法更改成功标签的文本值??!!如果我取出 dataType:json 完全相同的代码来更改标签,但使用错误消息不会!我必须说很困惑
  • 您可以更新您的 OP 以显示您的 javascript 和 php...类似于我上面所做的吗?
【解决方案2】:

我想,你的意思是用javascript解析json。

为此,您需要这样做:

JSON.parse('json');

或者

如果你使用jquery,你也可以这样做:

$.parseJSON('json');

两者都会返回从 JSON 解析的对象。

【讨论】:

  • 所以在我的 ajax 成功回调中,我可以说:
  • var errorArray = $.parseJSON('json') 然后通过errorArray.errorArray['nameErr'] 访问错误信息?
  • 嗯似乎仍然不起作用,当我尝试它时,我的 jquery 中出现语法错误:“Unexpected token r”
【解决方案3】:

这是一个简单的json全部:

$.getJSON("serverpage.php", { form_data })
    .done(function (data) {
          console.log(data);

          });
    })
    .fail(function (jqxhr, textStatus, error) {
        console.log(error);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多