2013-04-10 2 views
0

여기에 PHP 코드가 있습니다.이 코드에서는 역 이름과 ID 및 무작위 승객이 생성됩니다.문서 준비 기능으로 PHP에서 콤보 박스를 채우는 방법은 무엇입니까?

<?php 

include_once('RestUtils.php'); 
include_once('Passengers.php'); 

class Station implements JsonSerializable 
{ 
private $id; 
private $name; 
private $passengers; 

public function __construct($id, $name) 
{ 
    $this->setId($id); 
    $this->setName($name); 
    $this->passengers = array(); 
} 

//getters and setters 
public function jsonSerialize() 
{ 
    $data = array(); 
    $data['id'] = $this->id; 
    $data['name'] = $this->name; 
    $data['passengers'] = $this->passengers; 
    return $data; 
} 
} 

$stations = generateStations(); 

$data = RestUtils::processRequest(); 

switch($data->getMethod()) 
{ 
// Get item 
case 'get': 
    if(isset($data->getRequestVars()['stationId'])) 
    { 
     // Prepare information for a specific station 
     $station = getStationWithId($stations, $data->getRequestVars()  
['stationId']); 
     if($station != null) 
     { 
      echo RestUtils::sendResponse(200, json_encode($station),  
'application/json'); 
     } 
     else 
     { 
      echo RestUtils::sendResponse(404, 'Station not found!'); 
     } 
    } 
    else 
    { 
     // Prepare station list 
     echo RestUtils::sendResponse(200, json_encode($stations),  
    'application/json'); 
    } 

    break; 
    } 

function generateStations() 
{ 
$stations = array(); 
for($i = 1; $i <= 5; $i++) 
{ 
    $stations[] = new Station($i, 'İstasyon ' . $i); 

    $passengerIds = array(); 
    foreach(generatePassengers() as $j) 
    { 
     $passengerIds[] = $j->getId(); 
    } 
    $stations[$i - 1]->setPassengers($passengerIds); 
} 

return $stations; 
} 

function generatePassengers() 
{ 
$passengers = array(); 

$numberOfPassengers = rand(0, 20); 

for($i = 0; $i < $numberOfPassengers; $i++) 
{ 
    $from = rand(0, 5); 

    $to = rand(0, 5); 

    $arrivalTime = rand(0, 100); 

    $waitingTime = rand(0, 100); 

    $passengers[] = new Passenger($i, $from, $to, $arrivalTime, $waitingTime); 
} 

return $passengers; 
} 

function getStationWithId($stations, $id) 
{ 
foreach ($stations as $i) 
{ 
    if($i->getId() == $id) 
    { 
     return $i; 
    } 
} 

return null; 
} 

?> 

페이지가 사용자 이름과 ID로 방송국을 선택할 때, 그가 얼마나 많은 승객을 볼 수있는 문서 준비 function.After를 사용하여로드 할 때 내가 생성 스테이션 이름과 스테이션 ID를 가진 콤보 상자를 채우려 그 역에 있고 승객의 ID는 또한 Station.php에서 반환되어야합니다. 일반적으로 html 코드에서이 선택 옵션을 선택 했으므로 그 중 하나를 선택할 때 아무 것도하지 않는 스테이션 만 표시합니다.

<select name="selectStation" id="selectStation" ></select> 

나는 다음을 시도했다.

 $(document).ready(function() { 
     $.getJSON("Stations.php", function(jsonData){ 

     $.each(jsonData, function(key,value) { 

     $('#selectStation') 
    .append($("<option></option>") 
    .attr("value",key) 
    .text(value)); 

}); 
}); 

});

콤보 박스 값을 객체 Object로 얻었습니다. 왜 이런 일이 발생합니까? Stations.php에 따라 페이지가로드 될 때 콤보 상자를 채울 수있는 방법. 감사합니다. 모든 응답을 환영합니다.

+0

당신은 몇 가지 기본 옵션을 가지고 있습니다. (1) JSON (2)에서 목록을 채우기 위해 자바 스크립트를 사용하기 전에 필요한 모든 데이터를 잡고 JSON 표현을 포함하는 javascript 요소를 만듭니다. php (3)를 사용하여 올바른 옵션을 출력합니다. html 관련 목록을 채우기 전에 필요한 데이터를 검색하는 ajax 호출을 시작합니다. 나는 # 1을 수시로 사용하지만 2 번을 제안 할 것이다. – enhzflep

+0

@enhzflep reply.Host 주셔서 감사합니다. 나는 세 번째 옵션을 사용해야합니다. 문서 작성 기능과 아약스 호출을 사용해야합니다. 그러나 그 방법을 모르겠습니다./ – ntf

답변

1

좋아, 내가 원하는대로 할 수있는 몇 가지 샘플 코드는 다음과 같다. 참고 : 여전히 선택 상자의 변경 이벤트를 처리하기 위해 이벤트 수신기를 추가해야합니다. 나는 너에게 맡길거야.

파일 1 : ajaxAfterLoad.html

<!DOCTYPE html> 
<html> 
<head> 
<script src="script/AjaxRequest.js"></script> 
<script> 
function byId(e){return document.getElementById(e);} 
function newEl(tag){return document.createElement(tag);} 
function newTxt(txt){return document.createTextNode(txt);} 


window.addEventListener('load', mInit, false); 

function mInit() 
{ 
    AjaxRequest.get({ 'url':'makeJSON.php', 'onSuccess': onAjaxRequestDone }); 
} 

function makeSelectElementFromJSON(elemId, jsonText) 
{ 
    var srcData = JSON.parse(jsonText); 
    var result = newEl('select'); 
    result.setAttribute('id', elemId); 
    var i, curOpt; 
    for (i=0; i<srcData.length; i++) 
    { 
     curOpt = newEl('option'); 
     curOpt.setAttribute('value', srcData[i].value); 
     curOpt.appendChild(newTxt(srcData[i].text)); 
     result.appendChild(curOpt); 
    } 
    return result; 
} 

function onAjaxRequestDone(req) 
{ 
    var span = newEl('span'); 
    span.innerHTML = req.responseText; 
    byId('rawOutput').innerHTML = req.responseText; 

    byId('ajaxOutput').appendChild(makeSelectElementFromJSON('jsonSelectBox1', req.responseText)); 
} 
</script> 
<style> 
</style> 
</head> 
<body> 
    <h2>Below will be loaded by ajax</h2> 
    <div id='rawOutput'></div> 
    <div id='ajaxOutput'></div> 
</body> 
</html> 

파일 2 : makeJSON.php

<?php 

    $resultList = null; 

    for ($i=0; $i<10; $i++) 
    { 
     $curItem = null; 
     $curItem->value = $i; 
     $curItem->text = "Item " . ($i+1); 
     $resultList[] = $curItem; 
    } 
    printf("%s", json_encode($resultList)); 
?> 

파일 3 : AjaxRequest.js,http://ajaxtoolbox.com/request/source.php

+0

내 PHP 코드에 따라 PHP 코드를 변환 할 수 있습니까? – ntf

+0

네, 그렇지만하지 않겠습니다. 그렇게 할 수 없다면 코드를 이해할 수 없으므로 코드의 기능 사본을 본질적으로 쓸모 없게 만듭니다. 이것이 학교/대학을위한 것이라면 목적은 배우는 것입니다. 그것이 비즈니스를위한 것이라면, $$를 얼마나 제공합니까? _ 시도 할 수있는 시도와 이해하고자하는 의문이 풀릴 것입니다 ._ 게다가, 저는 jQuery를 사용하지 않습니다. $$이 충분히 흥분하지 않는 한 당신의 일을 할 수 있도록 배우지 않을 것입니다. – enhzflep

+0

고맙습니다. 나는 당신의 코드를 이해하려고 노력할 것입니다. 저는 자바 스크립트에 익숙하지 않아서 열심히 공부해야합니다. – ntf

관련 문제