0

我目前有一个下拉列表,它是使用 json 从我的数据库中动态生成的。目前value选择框的 和displayed 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 个字段传递给视图。在我看来,我不确定如何调用第二个 json 字段。

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

任何建议表示赞赏。

提前致谢。

4

2 回答 2

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>');
});

这只是一个粗略的假设。希望能帮助到你。

于 2013-08-02T11:17:30.140 回答
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 检查并且您可能还需要知道如何提取您的 json 数据。

于 2013-08-02T12:29:30.353 回答