循环通过json数组:读取第一行并从第二行循环

时间:2012-08-19 15:21:05

标签: jquery

使用下面的数组,我怎样才能从第二行开始读取第一行的值和从另一行读取的值?我在代码中包含了注释,让您了解我正在努力实现的目标。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PHP, jQuery search demo</title>
<link rel="stylesheet" type="text/css" href="my.css">
<script type="text/javascript" src="http://localhost/dev/ajax/jquery.js"></script>
<script type="text/javascript">
$(function() {

    $(".errCheck").click(function() {
             $.ajax({
                type: "GET",
                url:  "test_errors.php",
                dataType:"json",
                cache:false,

                success: function(data){
                //if 1st line of array: success == True How can I do this?
                //Redirect
                //else
                $('#errors div').empty();
                $.each(data, function (loc, msg) {//start from the second array value, in this case errOne
                $(loc).html(msg);
                });              

              },

            });    

        return false;
    });
});
</script>

</head>
<body>
<div id="container">
<div id="errors">
<div id="errOne"></div>
<div id="errTwo"></div>
<div id="errThree"></div>
</div> 
<input type="submit" class="errCheck" value="Check">
</div>
</body>
</html>

我的测试错误消息文件:

<?php

$errors['success'] = "false";
$errors['#errOne'] = "Enter a valid username";
$errors['#errTwo'] = "Enter a valid email";
$errors['#errThree'] = "Enter a valid password";

echo json_encode($errors);

?>

3 个答案:

答案 0 :(得分:1)

假设data.success的值是truefalse的字符串,请使用:

if ( data.success == 'true' ) {
    window.location = 'http://new_url.com';
    return;
}

delete data.success;
// Now just run the loop

理想情况下,您应该在success中存储一个真实的布尔值。所以在PHP代码中你应该使用:

$errors['success'] = false;
// or
$errors['success'] = true;

然后,在您的JavaScript中,您将其检查为真正的布尔值:

if ( data.success ) {
    // redirect...
}

答案 1 :(得分:1)

您可以使用shift()返回数组中的第一个元素并将其从数组中删除

var error = data.shift();

因此,var错误将是您的检查,然后可以在您的数据中使用$ .each()

<@> @Joseph Silber - 恭喜发现我上面的故意错误;-P

使用

delete myObject.property; // or myObject[property]

根据How do I remove a property from a JavaScript object?

编辑我想这现在和另一个答案相同,但我觉得我不妨在...中编写代码。

并使用其他地方所述的适当布尔值

success: function(data) {
  if(data.success == false) {
    delete data.success;
    $.each(data,function(loc, msg){
      $(loc).html(msg);
    })
  } else {
    // passed validation code
  }
}

虽然我更喜欢像这样安排Json

{
  success: false,
  errors: [
    {fieldKey: 'string'},
    {fieldKey: 'string'}
  ]
}

答案 2 :(得分:0)

你可以使用一个计数器,因为对象上没有索引,只有键:

$(function() {
    $(".errCheck").click(function() {
        $.ajax({
            type: "GET",
            url: "test_errors.php",
            dataType: "json",
            cache: false,
            success: function(data) {
                if (data.success) document.location.href = 'http://google.com';
                $('#errors div').empty();
                $.each(data, function(loc, msg) {
                    $(loc).html(msg);
                });
            },
        });
        return false;
    });
});​