我无法显示从数据库中获得的结果:
{"results": ["USA", "Canada"]}
{"message":"Could not find any countries."} //else
我从控制台收到此错误:
Uncaught TypeError: Cannot read property 'length' of undefined.
请你检查我的代码,找出我的错误。
以下是我的观点:
<a href="#my_div" id="load_country_list">My Travel Plans</a>
<div id="my_div">
<div id="country_list_is_got"></div>
<div id="country_list_is_not_got"></div>
</div>
控制器:
if ($this->my_model->did_get_country_list($user_id)) {
$country["results"]= $this->model_users->did_get_country_list($user_id);
echo json_encode($country);
}
else {
$country = array('message' => "Could not find any countries." );
echo json_encode($country);
}
JS档案:
$("#load_country_list").click(function() {
$.post('cont/get_country_list', function (country) {
if (country.message !== undefined) {
$( "#country_list_is_not_got").text(country.message);
} else {
$.each(country.results, function(i, res) {
var item = $('<div>'),
title = $('<h3>');
title.text(res);
item.append(title);
item.appendTo($("#country_list_is_got"));
});
}
});
});
答案 0 :(得分:2)
您需要告诉jQuery从服务器返回的内容类型(json
)
默认为&#39; string&#39;并且没有理由认为这是不正确的。
有关正确的参数顺序,请参阅the documentation。
你的.each
迭代器试图循环一个字符串,显然 - 失败了。
编辑:作为一个迂腐点,你为什么要使用POST来获取数据? &#34;获取&#34;确实在你的网址中。
答案 1 :(得分:0)
Live Demo试试这个,问题是results contain array.but you try to use key,value
if (country.message !== undefined) {
$( "#country_list_is_not_got").text(country.message);
} else {
for(i=0;i<country.results.length;i++){
var item = $('<div>'),
title = $('<h3>');
title.text(country.results[i]);
item.append(title);
item.appendTo($("#country_list_is_got"));
}
}
答案 2 :(得分:0)
我认为它应该是$.get
或$.getJSON
快捷方式,而不是$.post
$.getJSON("cont/get_country_list", function( data ) {
console.log(data);
// something like this for list construction and append to body
var countries = [];
// maybe you need data.results here, give it a try or see console
$.each( data, function( key, val ) {
countries.push( "<li id='" + key + "'>" + val + "</li>" );
});
$( "<ul/>", {
"class": "country-list",
html: countries.join( "" )
}).appendTo( "body" );
});