【发布时间】:2016-04-24 09:46:43
【问题描述】:
我是 Zend 的新手,很难掌握如何使用 Ajax 动态填充下拉菜单。我创建了一个不使用 Zend 框架的工作版本,但现在将我的代码放入 Zend 证明比我最初想象的要困难得多。当我尝试运行我的应用程序时,Chrome 的开发者工具会输出到控制台:
GET http://example.com/crm/getcities.php?name=CDS%20Midwinter%20Meeting 404 (Not Found)tradeshowOptions @ tradeshows:423onchange @ tradeshows:484
在我的应用程序控制器文件夹中,我有一个名为 CrmController.php 的控制器,如下所示:
<?php
class CrmController extends Zend_Controller_Action {
public function init() {
if(!Zend_Auth::getInstance()->getIdentity() || !in_array('crm', unserialize(Zend_Auth::getInstance()->getIdentity()->permission))){
$this->_helper->redirector('index', 'fm');
}
$this->view->headLink()->appendStylesheet('/public/css/crm.css');
$this->_auth = Zend_Auth::getInstance()->getIdentity();
$this->_users = new Application_Model_User;
$this->_crms = new Application_Model_Crm;
$this->_products = new Application_Model_Product;
$this->_helper->ajaxContext->addActionContext('crm', 'html')
->initContext();
}
public function tradeshowsAction()
{
}
我有一个名为 tradeshows.phtml 的视图,它看起来像:
<?php require_once('config.php'); ?>
<div class="row">
<div class="col-lg-12">
<h2 class="page-header">Sales CRM</h2>
<ol class="breadcrumb">
<li><a href="/crm/prospect">Leads</a></li>
<li><a href="/crm/prospect">Prospects</a></li>
<li><a href="/crm/accounts">Accounts</a></li>
<li><a href="/crm/activity">Activities</a></li>
<li class="active">Tradeshows</li>
</ol>
</div>
</div>
<h3>Tradeshows</h3>
<script>
var name = "";
var city = "";
var year = "";
// Gets the list of cities to populate the second drop down.
function tradeshowOptions(tsname) {
name = tsname;
if (tsname == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","getcities.php?name="+name,true);
xmlhttp.send();
name = tsname;
console.log(name);
}
}
// Get the list of cities to populate the third drop down.
function yearOptions(tscity) {
city = tscity;
if (tscity == "") {
document.getElementById("txtHint2").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint2").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","get_year.php?name="+name+"&city="+city,true);
xmlhttp.send();
city = tscity;
console.log(name + " " + city);
}
}
// Get the data list.
function dataSet(tsyear) {
year = tsyear;
if (tsyear == "") {
document.getElementById("txtHint3").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint3").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","get_data.php?name="+name+"&city="+city+"&year="+year,true);
xmlhttp.send();
console.log(name + " " + city + " " + year);
}
}
</script>
<form>
Select Tradeshow:
<select name="shows" onchange="tradeshowOptions(this.value)">
<option value="">Select a Tradeshow:</option>
<?php
$sql = 'SELECT * FROM tradeshows GROUP BY name ORDER BY name asc;';
$i = 0;
foreach ($conn->query($sql) as $row) {
echo "<option value='$row[name]'>$row[name]</option>";
$i++;
}
?>
</select>
</form>
<br>
<div id="txtHint"> </div>
<div id="txtHint2"> </div>
<div id="txtHint3"> </div>
<link href='/public/css/crm.css' rel='stylesheet' />
最后但同样重要的是,我有我的 getcities.php 文件,我不知道该放在哪里。我也尝试将其命名为 getcities.ajax.phtml 并将其放入视图中,但似乎没有任何效果。
<!DOCTYPE html>
<html>
<head></head>
<body>
<form>
Select City:
<select name="cities" onchange="yearOptions(this.value)">
<option>Please select a city...</option>
<?php
// Database Connection
require('config.php');
// Global Variables from _GET
$name = strval($_GET['name']);
// MySQL Query
$sql = "SELECT * FROM tradeshows WHERE name LIKE '$name' GROUP BY city ORDER BY city asc;";
// Output Each MySQL Result in Dropdown Menu
$i = 0;
foreach ($conn->query($sql) as $row) {
echo "<option value='$row[city]'>$row[city]</option>";
$i++;
}
?>
</select>
</form>
</body>
</html>
请随意撕开我的代码。我真的很想学习。另外,我意识到我的代码不是那么干燥,如果有人可以提供一些建议,我将不胜感激。
谢谢!
【问题讨论】:
标签: php mysql ajax zend-framework drop-down-menu