Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript json数据如何以jquery$.each的形式显示_Javascript_Php_Jquery_Json - Fatal编程技术网

Javascript json数据如何以jquery$.each的形式显示

Javascript json数据如何以jquery$.each的形式显示,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我使用的是$。我在这里得到的json响应的每个循环都是 ["errors",[ {"element":"country_name","error":"Value is required and can't be empty"}, {"element":"dial_code","error":"Value is required and can't be empty"}, {"element":"country_code","error":"

我使用的是
$。我在这里得到的json响应的每个
循环都是

["errors",[
        {"element":"country_name","error":"Value is required and can't be empty"},
        {"element":"dial_code","error":"Value is required and can't be empty"},    
        {"element":"country_code","error":"Value is required and can't be empty"}
    ]
]

$.each(response.errors, function (i, field) {
    alert(field);
});
但我没有任何警觉。有谁能告诉我们如何做到这一点

新更新

实际上,我正在使用zend框架并转换一个名为$messages的数组,它看起来是这样的

Array
(
[country_name] => Array
(
[isEmpty] => Value is required and can't be empty
)

[dial_code] => Array
(
[isEmpty] => Value is required and can't be empty
)

[country_code] => Array
(
[isEmpty] => Value is required and can't be empty
)

)
<?php 
foreach ($messages as $key => $value) {

$errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
}
?>
然后我把这个数组转换成我实际需要的东西,就像这样

Array
(
[country_name] => Array
(
[isEmpty] => Value is required and can't be empty
)

[dial_code] => Array
(
[isEmpty] => Value is required and can't be empty
)

[country_code] => Array
(
[isEmpty] => Value is required and can't be empty
)

)
<?php 
foreach ($messages as $key => $value) {

$errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
}
?>

然后我将其转换为json编码并返回到success函数

<?php
$response = $this->getResponse();
$response->getHeaders()->addHeaderLine( 'Content-Type', 'application/json' );
$response->setContent(json_encode(array("errors",$errors)));
return $response;
?>

您的json应该是:

var response={"errors":[
   {"element":"country_name","error":"Value is required and can't be empty"},
   {"element":"dial_code","error":"Value is required and can't be empty"},    
   {"element":"country_code","error":"Value is required and can't be empty"}]
}
因为现在json包含两列,第一列包含word
errors
,第二列包含3个对象

var响应={“错误”:[
{“元素”:“国家/地区名称”,“错误”:“值是必需的,不能为空”},
{“元素”:“拨号代码”,“错误”:“值是必需的,不能为空”},
{“元素”:“国家/地区代码”,“错误”:“值是必需的,不能为空”}]
};
$.each(response.errors,函数(i,字段){
控制台日志(字段);
});

我想你的json有问题,你能试试下面的代码吗

$(function(){
  var response = {"errors":
  [{
    "element": "country_name",
    "error": "Value is required and can't be empty"
  },
  {
    "element": "dial_code",
    "error": "Value is required and can't be empty"
  },
  {
    "element": "country_code",
    "error": "Value is required and can't be empty"
  }]}

  $.each(response.errors, function (index, piece) {
    $.each(piece,function(key,value){
        alert(key+"--"+value);
    })
  });
});
下面是一个工作示例:


下面是php代码的更新,您的输出应该是这样的

<?PHP
    //Create new object
    $responseObject = new stdClass();
    //Create new object property as an array which means you are going to output "errors" as an json key not an array item
    $responseObject->errors = array();
    //Populate the response
    foreach ($messages as $key => $value) {
        $responseObject->errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
    }

    //Create output
    $response->setContent(json_encode($responseObject));
?>

希望这有助于JSON响应:

[
  "errors",
  [
    {"element":"country_name","error":"Value is required and can't be empty"},
    {"element":"dial_code","error":"Value is required and can't be empty"},    
    {"element":"country_code","error":"Value is required and can't be empty"}
  ]
]
是由两个元素组成的数组。第一个元素是string
“errors”
,第二个元素是对象数组。因此,您应该循环响应的第二个元素(即
响应[1]
),如下所示:

$.each(response[1], function (i, field) {
    console.log(field);
});
另外,我建议您使用
console.log()
而不是
alert()
进行调试

有关运行示例,请参见。

此处的操作:

$response->setContent(json_encode(array("errors",$errors)));
将产生JSON:

["errors",[
        {"element":"country_name","error":"Value is required and can't be empty"},
        {"element":"dial_code","error":"Value is required and can't be empty"},    
        {"element":"country_code","error":"Value is required and can't be empty"}
    ]
]
这是正确的,但有点不寻常。要访问错误数组,您可以执行以下操作:

var response = data; // data is JSON from server
$.each(response[1], function (i, field) {
  console.log(field); // alert(field);
});
// response[0] is string "errors"
// response[1] is array of error message objects
如果您希望JSON如下所示:

{
  "errors":[
     {"element":"country_name","error":"Value is required and can't be empty"},
     {"element":"dial_code","error":"Value is required and can't be empty"},    
     {"element":"country_code","error":"Value is required and can't be empty"}
  ]
}
var response = data; // data is JSON from server
$.each(response.errors, function (i, field) {
  console.log(field); // alert(field);
});
您需要将服务器代码更改为:

$response->setContent(json_encode(array("errors" => $errors)));
然后,您可以像这样处理响应数据:

{
  "errors":[
     {"element":"country_name","error":"Value is required and can't be empty"},
     {"element":"dial_code","error":"Value is required and can't be empty"},    
     {"element":"country_code","error":"Value is required and can't be empty"}
  ]
}
var response = data; // data is JSON from server
$.each(response.errors, function (i, field) {
  console.log(field); // alert(field);
});

检查控制台是否有错误。它显示“TypeError:a未定义”如果我使用这个[{“元素”:“国家/地区名称”,“错误”:“值是必需的,不能为空”},{“元素”:“拨号代码”,“错误”:“值是必需的,不能为空”},{“元素”:“国家/地区代码”,“错误”:“值是必需的,不能为空”}]@phpdevp这意味着您正在创建一个没有父键的数组,这意味着如果您$。您的每个(响应)迭代看起来都是
{“element”:“…”,“error”:“…”}
@phpdevp它将起作用。您可以在这里看到一个示例:我使用的正是您所写的,但它显示了这个错误“ypeError:invalid'in”操作数a问题中的JSON是有效的,它是由两个元素组成的数组,一个字符串,另一个数组。他的JSON是完全有效的,没有理由说他的JSON应该不同。有时我们无法更改另一方发送的JSON。我并不是在我的帖子中提到它不是有效的JSON,我只是说,使用当前JSON结构(他/她)无法使用
响应获取对象。错误
,如果(他/她)无法更改JSON结构,则可以使用
响应[1]
,检查我的更新,但在我的浏览器中,它会显示此错误“TypeError:invalid'in'operand a”嘿,我也在使用“var response=JSON.stringify(data);”当我提醒此响应时,它会显示我正在使用的JSON字符串。使用此字符串化数据有什么问题吗?@phpdevp,如果您像
var response=JSON.stringify(数据)那样字符串化数据$。每个(响应[1],…)
。。。是的,这很重要,因为
stringify
会将数据转换为字符串。你应该做
var-response=data