2016-03-19 42 views
-1

顯示我使用$.each循環的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 Framework和轉換陣列名爲$消息,這些消息看起來這

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編碼並返回到suc塞斯功能

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

檢查控制檯唯一的錯誤。 – Tushar

+0

它說「TypeError:a is undefined」 –

回答

3

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

是兩個元素的數組。第一個元素是字符串"errors",第二個元素是對象數組。所以,你應該遍歷的響應(即response[1]),這樣的第二個元素:您使用console.log()代替alert()調試

$.each(response[1], function (i, field) { 
    console.log(field); 
}); 

另外,我建議。

運行示例見JS Fiddle

+0

你試過嗎? –

+0

@phpdevp你試過了嗎? – stjepano

+0

@phpdevp是的,請參閱[JS小提琴](https://jsfiddle.net/nu439quu/)。 –

3

您的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"}] 
} 

既然現在你有一個包含兩列第一含有字errors和第二包含3個對象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"}] 
 
}; 
 

 
$.each(response.errors, function (i, field) { 
 
    console.log(field); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


如果你不想改變你的JSON結構就可以定位到第二列response[1]代替:

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[1], function (i, field) { 
 
    console.log(field); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

他的JSON是完全有效的,沒有理由認爲他的JSON應該是不同的。有時我們無法更改對方發送的JSON。 – stjepano

+0

我不是在我的帖子中提到它不是一個有效的JSON,我只是說用當前的JSON結構(他/她)不能使用'response.errors'獲取對象,並且如果(他/她)不能改變JSON結構只能使用'response [1]',檢查我的更新 –

1

我認爲你的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); 
    }) 
    }); 
}); 

和工作的例子是在這裏:https://jsfiddle.net/hh3r7y36/


下面是更新你的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)); 
?> 

希望這有助於

+0

如果我使用這個[{「element」:「country_name」,「error」:「Value is required and can not empty」 },{「element」:「dial_code」,「error」:「值是必需的,不能爲空」},{「element」:「country_code」,「error」:「值是必需的,不能是空「}} –

+0

@phpdevp這意味着你正在創建一個沒有父鍵的數組,這意味着如果你的$ .each(response)每次迭代你的樣子都是'{」element「:」....「,」錯誤「:」...「}' –

+0

so $ .each不會在那裏工作? –

0

你在這裏做什麼:

$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"} 
    ] 
} 

你需要改變你的服務器代碼:

$response->setContent(json_encode(array("errors" => $errors))); 

那麼你可以使用您的回覆數據,如下所示:

var response = data; // data is JSON from server 
$.each(response.errors, function (i, field) { 
    console.log(field); // alert(field); 
}); 
+0

你的答案是對的,但有點晚,但thnxx幫助其現在的工作 –

+0

@phpdevp np,很高興你解決了問題 – stjepano