2013-04-30 74 views
1

我創建了一個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); 

在此先感謝

+0

第一:爲什麼在PHP上下文中使用'console.log()'?這肯定是一個錯字,因爲我敢打賭會產生一個語法錯誤(在變量名前面沒有$)。 第二:你是否嘗試過在自己的數據庫上運行SQL,看看你是否真的選擇了一些東西?很可能是查詢沒有返回任何行。 – 2013-04-30 23:59:55

+0

查詢確實有效,我確實嘗試了查詢,並且確實返回結果。我添加了try catch塊來查看是否有異常。在我執行$ statement = $ this-> adapter-> query($ sql)之後,沒有拋出任何異常。行,它不會去下一行。 – user2355065 2013-05-01 12:57:21

回答

0

的問題是,該適配器爲null。

+0

在這裏學習的教訓是在開發過程中打開所有錯誤。編輯你的php.ini並找到'error_reporting'的行,並將其設置爲'E_ALL | E_STRICT'。然後確保'display_errors'打開。 – 2013-05-03 00:18:36