我創建了一個JavaScript文件,其中包含js以觸發下拉列表中的事件onchange。該JS低於:在jQuery.Post方法中執行mySQL查詢
// /public/js/custom.js
jQuery(function($) {
$("#parent").change(function(event){
event.preventDefault();
var parentID = $('#parent').val();
var id = $('#id').val();
$.post("/menu/GetMenuChildren", {pID: parentID, thisID: id },
function(data){
if(data.response === true){
var $el = $("#Position");
$el.empty(); // remove old options
$.each(data.newOptions, function(key, value) {
$el.append($("<option></option>")
.attr("value", value).text(key));
});
} else {
// print error message
alert("something went wrong in Post");
}
}, 'json');
alert("After Post");
});
});
在我Controller.php這樣我有一個功能GetMenuChildrenAction如下圖所示:
public function GetMenuChildrenAction()
{
$request = $this->getRequest();
$response = $this->getResponse();
if ($request->isPost())
{
$post_data = $request->getPost();
$parent_id = $post_data['pID'];
$id = $post_data['thisID'];
//$this->form->get('Position')->SetOptionValues(
$newOptions = $this->getMenuTable()->GetPositionsByID($parent_id, $id);
if(isset($newOptions))
{
$response->setContent(\Zend\Json\Json::encode(array('response' => true, 'newOptions' => $newOptions)));
}
else
{
$response->setContent(\Zend\Json\Json::encode(array('response' => false)));
}
}
return $response;
}
在MenuTable.php有一個方法GetPositionsByID如下圖所示:
public function GetPositionsByID($parentID, $id)
{
if($parentID == 0)
{
$menu = $this->getMenu($this->id);
$parentID = $menu->parent_id;
}
if(isset($parentID))
{
$sql = "Select ID,Label from Menu Where parent_ID = " . $parentID . " and id > 1 and id <> " . $id . " Order by Position,Label";
try
{
$statement = $this->adapter->query($sql);
}
catch(Exception $e) {
console.log('Caught exception: ', $e->getMessage(), "\n");
}
$res = $statement->execute();
$rows = array();
$i = 0;
foreach ($res as $row) {
$i = $i + 1;
$rows[$i] = array (
$i => $row['Label']
);
}
return $rows;
}
return array();
}
這一切似乎都正確地連接起來,當我調試代碼時,我得到這一行:
$statement = $this->adapter->query($sql);
然後沒有任何反應。如果我更換所有的代碼在GetPositionsByID方法,並簡單地返回數組類似如下:
return array('1' => 'one', '2' => 'two');
它的偉大工程,但是我想從數據庫中的數據。有誰知道爲什麼執行會失敗這條線?
$statement = $this->adapter->query($sql);
在此先感謝
第一:爲什麼在PHP上下文中使用'console.log()'?這肯定是一個錯字,因爲我敢打賭會產生一個語法錯誤(在變量名前面沒有$)。 第二:你是否嘗試過在自己的數據庫上運行SQL,看看你是否真的選擇了一些東西?很可能是查詢沒有返回任何行。 – 2013-04-30 23:59:55
查詢確實有效,我確實嘗試了查詢,並且確實返回結果。我添加了try catch塊來查看是否有異常。在我執行$ statement = $ this-> adapter-> query($ sql)之後,沒有拋出任何異常。行,它不會去下一行。 – user2355065 2013-05-01 12:57:21