CodeIgniter:使用JQuery的基本搜索引擎

时间:2014-02-10 03:15:07

标签: php jquery codeigniter search-engine

我是CodeIgniter的新手,我正在尝试使用JQuery构建一个基本的搜索引擎。

我的控制器是

class Welcome extends CI_Controller {

    public function index()
    {
                $this->load->view('searchPeople');
                $this->load->view('css/format');
    }
        public function searchPeopleResults(){
            $theCity=$_POST['theCity'];
            $this->load->model('MSearchPeople');
            $data=$this->MSearchPeople->provideSearchPeopleResults($theCity);
            $this->load->view('searchPeople',$data);
            $this->load->view('css/format');            
        }
}

我的模型的相关部分是

Class MSearchPeople extends Model {

    function MSearchPeople() {
        parent::Model();
    }

    function provideSearchPeopleResults($theCity){
    // ... There is a query to the database that I dinamically generate HTML data.        

        return $data;
    }

我的观点的相关部分是

<html>



    <head>


        <script type="text/javascript" src="http://code.jquery.com/jquery-1.3.2.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.1.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $("form#searchForm").submit(function() {
                    var theCity = $("select#chooseCity").val(); 
                    $.post("welcome/searchPeopleResults/", {theCity: theCity}, function(data) {
                        $("div#searchResults").html(data);
                    });
                  return false
                });
            });
        </script>
    </head>

    <body>


        <FORM id="searchForm">
            <h2>Selecione uma cidade: </h2>            
            <select id="chooseCity">
                <?php
                $theCitiesOptionsHTML = "cityOptions.html"; <!-- A large list of cities -->
                require($thePathDataFiles.$theCitiesOptionsHTML);                
                ?> 
            </select>
        </FORM>
        <div id="searchResults">
            <!-- Search results should arise here -->
        </div>        

     </body>

</html>      

重要的是要强调PHP中没有MVC设计的版本正在运行。但是,在翻译之后,它就不再起作用了。

}

netbeans输出为:

[2014年2月10日星期一01:06:19] 127.0.0.1:52977 [200]:/

[2014年2月10日星期一01:06:29] 127.0.0.1:52980 [500]:/ welcome / searchPeopleResults /

[2014年2月10日星期一01:06:29] 127.0.0.1:52981 [500]:/ welcome / searchPeopleResults /

** 1)是否需要两个控制器“index”和“searchPeopleResults”?

2)数据是否正确转移到必要的类?

3)无论如何回应这些类中的变量?**

4)我是否应该加载上述头文中的脚本以外的东西?

谢谢!

2 个答案:

答案 0 :(得分:1)

将您的代码更改为::

JS part ::

$(document).ready(function() {
      $("form#searchForm").submit(function(e) {
           e.preventDefault(); //prevent default form submission
           var theCity = $("select#chooseCity").val(); 
           $.post("welcome/searchPeopleResults/", {theCity: theCity}, function(data) {
               $("div#searchResults").html(data);
          });
          return false
      });
});

AND控制器代码:: 您需要将视图作为字符串从控制器回显,例如

...
public function searchPeopleResults(){
     $theCity=$this->input->post('theCity');
     $this->load->model('MSearchPeople');
     $data=$this->MSearchPeople->provideSearchPeopleResults($theCity);
     //$this->load->view('searchPeople',$data);
     //$this->load->view('css/format');       
     //echo the view as string
     echo $this->load->view('searchPeople',$data, TRUE);   
}
...

答案 1 :(得分:0)

经过一次又一次的尝试,我找到了解决方案。我想说的是,我真的很感谢@Sudhir帮助我看到了正确的道路。

1)我的代码出现严重错误。我认为它与codeIgniter的版本有关,但我只是在更改控制器后才意识到。 “我正在扩展Model而不是CI_Model。

2)我不需要在searchPeopleResults中再次加载视图,我只需要回显provideSearchPeopleResults的结果。

这里我显示正确的代码:

   class Welcome extends CI_Controller {

        public function index()
        {
                    $this->load->view('searchPeople');
                    $this->load->view('css/format');
        }
            public function searchPeopleResults(){
                $theCity=$this->input->post('theCity');
                $this->load->model('MSearchPeople');
                $data=$this->MSearchPeople->provideSearchPeopleResults($theCity);
                echo $data;
            }
    }
Class MSearchPeople extends CI_Model {

    function provideSearchPeopleResults($theCity) {

    // Here I got my database query and save as $theHtml such as $theHtml='<p> Hello </p>'.       

     return $theHtml;

    }
}

我的观点正是我之前对@Sudhir建议的修改[包含e.preventDefault]的看法。

最后,让我回答上面的问题:

1)是的,在我的解决方案中,我需要两个控制器。但是,我不需要加载视图两次。

2)现在,数据已正确传输。

3)是的,我这样做了。

4)不,脚本没问题。但最好的解决方案是下载它们并将其保存在脚本目录中。