我的控制器中有以下代码:
$regions = $this->signup_m->get_regions($country_id);
foreach ($regions as $key => $region) {
echo "<option value='$key'>$region</option>";
}
它是由ajax请求调用的。而不是在控制器中构建html我宁愿返回一个json对象,我可以从中构建下拉选项。如何以json格式发送此数据?
我读到了PHP的json_encode函数,当我需要发回一个对象时,我能够使用它,但在这种情况下,我认为我需要发回多个对象(每个下拉选项一个)。所以不确定如何去做,因为它都在循环中。
答案 0 :(得分:1)
在php中:
$regions = $this->signup_m->get_regions($country_id);
$jsonObj = array();
foreach ($regions as $key => $region) {
$jsonObj[] = (object) array('value'=>$key, 'test'=>$region);
}
echo json_encode($jsonObj);
在javascript中你会收到一个json对象。如果您使用的是jquery,那么您只需要遍历数组即可。否则你将需要解析/评估它然后循环它
答案 1 :(得分:0)
您可以使用更少的空间来执行此操作:
$keysRegionsJSON = json_encode($this->signup_m->get_regions($country_id));
然后你会按如下方式使用它:
$keysRegions = json_decode($keysRegionsJSON);
foreach ($keysRegions as $key => $region) {
echo '<option value="' . $key . '">' . $region . '</option>';
}
普通JS中的同样的事情:
for (key in keysRegionsJS) {
document.write('<option value="' + key + '"> + keysRegionsJS[key] + '</option>';
}
答案 2 :(得分:-1)
您可以在没有json_encode的情况下执行此操作
$json="{";
$count=0;
$regions = $this->signup_m->get_regions($country_id);
foreach ($regions as $key => $region) {
if($count>0){$json.=",";}
$json.="\"".$key."\":\"".$region."\"";
$count++;
}
$json.="}";
echo $json;
然后你将在你的javascript中使用for循环将其转回选项