我是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)我是否应该加载上述头文中的脚本以外的东西?
谢谢!
答案 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)不,脚本没问题。但最好的解决方案是下载它们并将其保存在脚本目录中。