首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jQuery/Ajax/PHP在从数组加载页面时自动填充选择框

使用jQuery/Ajax/PHP在从数组加载页面时自动填充选择框
EN

Stack Overflow用户
提问于 2021-05-09 14:20:50
回答 2查看 209关注 0票数 1

因此,当页面加载时,我尝试同时填充三个选择框。框的数据来自数组。因此,一个框用于$cpuArr,一个框用于$motherboardsArr,一个框用于$videocardArr。

代码语言:javascript
复制
$cpuArr = file_get_contents('data/cpu.json');
$motherboardsArr = file_get_contents('data/motherboard.json');
$videocardArr = file_get_contents('data/video-card.json');

if(isset($_POST['request']) == 1){

    echo $cpuArr;// Sending response
}

jQuery

代码语言:javascript
复制
$(document).ready(function(){
//Ajax request
    $.ajax({ 
        url: 'logic.php',
        type: 'post',
        data: {request: 1},
        dataType: 'json',
        success: function fetchItems(response){

            for( var i = 0; i< response.length; i++){
                $('#cpu').append("<option value='"+response[i]['ID']+"'>"+response[i]['Name']+"</option>");
            }
        }
    });
});

代码语言:javascript
复制
                            <select id='cpu'>
                                <option value="0">-Select CPU-</option>
                            </select>
                            <select id='motherboard'>
                                <option value="">-Select motherboard-</option>
                            </select>
                            <select id='video-card'>
                                <option value="">-Select Video Card-</option>
                            </select>

它只工作一个,我不知道如何做三个盒子,而不归还代码,我将感激如果有人可以帮助。:)

EN

回答 2

Stack Overflow用户

发布于 2021-05-09 14:34:48

您可以在associative array内部传递所有数据,然后使用json_encode即:

代码语言:javascript
复制
  if(isset($_POST['request']) == 1){
        $data = array("cpuArr"=>$cpuArr, 
                      "motherboardsArr"=>$motherboardsArr,  
                       "videocardArr"=>$videocardArr);
         echo json_encode($data);
    }

然后,在ajax的成功函数中,您可以像下面这样访问它们:

代码语言:javascript
复制
success: function fetchItems(response){
      var cpu = response.cpuArr;
      var mb = response.motherboardsArr;
      var vdio = response.videocardArr;

            for( var i = 0; i< cpu.length; i++){
                $('#cpu').append("<option value='"+cpu[i]['ID']+"'>"+cpu[i]['Name']+"</option>");
            }
      //same for others ...
   }
票数 1
EN

Stack Overflow用户

发布于 2021-05-09 15:12:29

您可以在一个请求中完成所有这些,只需使用$.getJSON()发出一个GET请求。

PHP

代码语言:javascript
复制
function getFileAsArray($type){
   $path = "data/".$type.".json";
   return json_decode(file_get_contents($path), true);
}

$types = ['cpu','motherboard','video-card'];

foreach($types as $type){
   $output[$type] = getFileAsArray($type);
}

echo json_encode($output);

JQuery:

代码语言:javascript
复制
$.getJSON('logic.php').then(data => {    
      $.each(data, (key, arr)=>{
         const options = arr.map(o => new Option(o.Name, o.ID));
         // keys in php matching ids in html
         $('select#' + key).append(options);
      });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67458752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档