codeigniter - 在视图中将两个json值从model传递到dropdownlist

时间:2013-08-02 10:58:26

标签: jquery json codeigniter select

我目前有一个下拉列表,该列表是使用json从我的数据库动态生成的。目前,选择框的valuedisplayed text是相同的。两个json值都被传递。

我想调整我的模型以将两个json值返回到下拉列表。一个是displayed文本,一个是value

如何调整json和我的jquery脚本以使用字段idDelAddress填充值,并将显示的文本填充为字段address

我的模特是:

  function GetDeliveryAddressfromCustomer($q){

    $query = $this->db->query("
    select idDelAddress, address
    from [NFG_Live].[dbo].[Client]
    join
    [NFG_Live].[dbo].[_etblDelAddress]
    on
    [NFG_Live].[dbo].[_etblDelAddress].iAccountID=[NFG_Live].[dbo].[Client].DCLink
    where Name='$q'
      ");
        if($query->num_rows > 0){
            foreach ($query->result_array() as $row){
                $row_set[] = htmlentities(stripslashes($row['address'])); 
                $row_set[] = htmlentities(stripslashes($row['idDelAddress'])); //I added this for second field. correct?

           }
           return $row_set;
        }
      }

我的JQuery是:

$.post('GetDeliveryAddressfromCustomer', {data:selectedObj.value},function(result) {     
$("#deliveryaddress").html('<option value=""></option>'); //or you could empty it or ignore this line
$.each(result, function(index, value) {
$("#deliveryaddress").append('<option value="'+value+'">'+value+'</option>')
               });
              }
              , "json"  
              );

我不确定如何调整我的模型以将2个字段传递给视图..在我看来,我不确定如何调用secind json字段。

所以我想要这样做:  $("#deliveryaddress").append('<option value="'+idDelAddress_value+'">'+Address_value+'</option>')

任何建议都表示赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可能需要这个,在您的模型中进行此更改:

if($query->num_rows > 0){
    foreach ($query->result_array() as $row){
        $arr    = array(
                    "address"=>htmlentities(stripslashes($row['address'])),
                    "idDelAddress"=>htmlentities(stripslashes($row['idDelAddress']))
                  );
        $row_set[]  = $arr;
        //$row_set[] = htmlentities(stripslashes($row['address'])); 
        //$row_set[] = htmlentities(stripslashes($row['idDelAddress'])); //I added this for second field. correct?

   }
   return $row_set;
}

现在在您循环的javascript中,执行以下操作:

$(jQuery.parseJSON(JSON.stringify(result))).each(function() {  
     $("#deliveryaddress").append('<option value="'+this.idDelAddress+'">'+this.address+'</option>');
});

这只是一个粗略的假设。希望它有所帮助。

答案 1 :(得分:0)

你要做的就是将两个数组存储在另一个数组中,并将json_encode()存储在变量中,同时显示输出

模型为

function GetDeliveryAddressfromCustomer($q){

    $query = $this->db->query("
    select idDelAddress, address
    from [NFG_Live].[dbo].[Client]
    join
    [NFG_Live].[dbo].[_etblDelAddress]
    on
    [NFG_Live].[dbo].[_etblDelAddress].iAccountID=[NFG_Live].[dbo].[Client].DCLink
    where Name='$q'
      ");
        if($query->num_rows > 0){
            foreach ($query->result_array() as $row){
                $address[] = htmlentities(stripslashes($row['address'])); 
                $idDelAddressr[] = htmlentities(stripslashes($row['idDelAddress'])); //I added this for second field. correct?

           }
          $row_set['address'] = $address;
          $row_set['idDelAddress'] = $idDelAddress;
           return $row_set;
        }
      }

在您的控制器中执行类似的操作

function controller_fn(){
     $json_var = $this->your_model->GetDeliveryAddressfromCustomer($q);
     echo json_encode($json_var);
}

在你的js中你必须做这样的事情

$.post('GetDeliveryAddressfromCustomer', {data:selectedObj.value},function(result) {   
     var opt="";
     for(i=0;i<result.address.length;i++){
         opt += '<option value="'+result.idDelAddress+'">'+result.address(i)+'</option>'
     }
     $('#deliveryaddress').append(opt);

},"json");

您已确保输出是有效的json检查here,并且您可能还需要知道如何提取json数据。