0

私は今まで通常の dataType 'html' で AJAX 投稿を使用していましたが、今はそれを変換して dataType 'json' を使用しています。

json を使用する前に、入力フィールドの横にある for each span で応答エラーを分割しました。

これは、通常のデータ型 'html' を使用した私の古い ajax succses 分割エラー コードです。

    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 応答からのエラーを保持するスパンがあります。

そして今、問題は私の古いコードが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 応答コードとして何らかの考えがありますか?

4

2 に答える 2

2

データ内の文字列を分割する必要はありません。正しい 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"});
}
于 2013-08-12T08:25:47.323 に答える
0
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"});
          }    
}
于 2013-08-12T09:58:34.333 に答える