【问题标题】:split ajax json response errors in each field在每个字段中拆分 ajax json 响应错误
【发布时间】:2013-08-19 17:59:57
【问题描述】:

到目前为止,我使用普通 dataType 'html' 的 AJAX 帖子,现在我将其转换并使用 dataType 'json',

现在在我使用 json 之前,我将响应错误拆分为输入字段旁边的每个跨度。

这是我使用普通数据类型“html”的旧 ajax 成功拆分错误代码:

    success:
           function(data){

  var data_array = split('*');
                 for(var i=0; i<data_array.length-1; i++)
                 {
                    messgae_array = data_array[i].split(':');
                    $("#"+messgae_array[0]+"_error").html(messgae_array[1]);
                    $("#"+messgae_array[0]).css({"border":"1px solid red"});
                 }

}

这是我在表单上的输入

<input type="text" id="uname" name="uname" value="" class="inplaceError" />
<span id="uname_error"></span>

我有更多的输入,我只是先看看它的外观..

所以我的每个输入都有跨度来保存来自 ajax 响应的错误。

现在问题是我的旧代码知道处理 html 响应而不是 json 响应,我是 javascript/ajax/json 新手,我不知道如何更改拆分代码,所以使用 json 响应而不是正常的 html 响应,请问有什么帮助吗?

编辑:

我会触发这样的错误:

   if(isset($_POST['p']) && !empty($_POST['p']))
    {
        if($password == $retype)
            {
            $random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
        // Create salted password (Careful with the chilli)
        $password = hash('sha512', $password.$random_salt);

        }
        else
        {
          $message['password']='&nbsp;password not match';
        }

and so on .

  $message['email']='&nbsp;wrong email';

和我的 foreach json 数组的错误:

  foreach($message as $key => $val) {


          $return = array('error' => $key, 'message' => $val );
         echo json_encode($return);

           }

所以这里的 foreach 有问题,因为它的错误是错误的,因为 ajax 响应代码有什么想法吗?

【问题讨论】:

  • var str="How are you doing today?"; var n=str.split(" ");这就是split函数的使用方式。
  • data_array 必须类似于 var data_array= data.&lt;attr&gt;.split('*');
  • @Husman Pedantic。又学了一个新词,耶!
  • @rps:讽刺的是,在纠正另一个拼写错误时会犯错。我的错!
  • 只是为了迂腐,你在messgae_array中拼错了message

标签: javascript ajax json


【解决方案1】:

您不必拆分数据中的字符串。如果它是正确的 JSON 格式,您可以使用对象表示法轻松访问它(也可以通过数组表示法):

var json = '{
  "someVar":true,
  "error":"my fatal error message"
}';

var obj = JSON.parse(json);

alert(obj.error);

这就是创建 JSON 的原因,以便于访问和使用。如果您仍要手动编辑和拆分字符串以从 JSON 中读取数据,那您就错了。

编辑: 如果您需要识别和组织您的消息,请使用嵌套 json。

var json = "errors": [{
        "id": "001",
        "field": "textfield1",
        "message": "message1."
    },
    {
        "id": "002",
        "field": "textfield2",
        "message": "message2."
    }];

    var obj = JSON.parse(json);

您现在可以将样式应用于这些字段,并显示消息:

foreach(obj.errors as err) {
  $("#"+err.field).html(err.message);
  $("#"+err.field).css({"border":"1px solid red"});
}

【讨论】:

  • 它很好,但与我需要的不同,正如你看到的我的代码,我在 foreach 中添加了 css 样式等,但是 foreach 使用普通数据类型 'html' 而不是 json 类型..跨度>
  • 是的,您仍然可以这样做。您的 JSON 对象可以包含多个错误消息,还可以保留对 html 元素或 id 或类的引用,您只需要正确构建 JSON。
【解决方案2】:
success:function(data)
        {
          // consider your data is like this JSON string
          // var data= [{"error":"uname","message":"&nbsp;wrong pass."},{"error":"email","message":"&nbsp;wrong name"}];
          // instead of this
          // var data_array = split('*');
          // use this

          //change your json parser to this
          var data_array = JSON.parse(data);
          for (var i in data_array )
          {
             $("#"+data_array[i].error+"_error").html(data_array[i].message);
             $("#"+data_array[i].error).css({"border":"1px solid red"});
          }    
}

【讨论】:

  • 感谢更好的回答! ,但它不起作用:(但我需要这样的东西..
  • 检查数据是否转换为 data_array。这意味着 JSON 是否被解析
  • 是的,我有相同的 json 数组:{"error":1,"message":" wrong email"}
  • 你的数据必须是这样的 '{"uname":"user name is not valid","password":"Mandatory"}'
  • 是的,我现在仍然无法正常工作,我的不同之处是什么? {"error":1,"message":" 错误的电子邮件"}
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多