0

使用像我下面这样的数组,如何仅读取第一行的值以及从第二行开始通过另一行的循环?我在代码中包含了注释,让您了解我想要实现的目标。

<!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);

?>
4

3 回答 3

1

假设 的值data.success是一个字符串trueor false,使用这个:

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...
}
于 2012-08-19T15:25:38.700 回答
1

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

var 错误 = data.shift();

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

@Joseph Silber - 恭喜你在上面发现了我的故意错误;-P

采用

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

根据如何从 JavaScript 对象中删除属性?

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

并使用正确的布尔值,如别处所述

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'}
  ]
}

等等。

于 2012-08-19T16:13:13.053 回答
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;
    });
});​
于 2012-08-19T15:30:31.440 回答