无法获得要在页面上显示的结果

时间:2014-08-05 17:38:54

标签: javascript php jquery ajax json

我无法显示从数据库中获得的结果:

{"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"));
            });   
        }
    });
   });  

3 个答案:

答案 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" );
});