Php 在Yii框架上使用ajax添加记录时,firebug报告出现错误500
我尝试在yii框架上使用ajax。当我尝试将记录添加到数据库时,失败了。按钮始终在加载状态下冻结。显示记录很好,数据已显示,但在尝试添加新记录或编辑记录时无法显示。对于删除记录,它正在工作 下面是Php 在Yii框架上使用ajax添加记录时,firebug报告出现错误500,php,jquery,mysql,ajax,yii,Php,Jquery,Mysql,Ajax,Yii,我尝试在yii框架上使用ajax。当我尝试将记录添加到数据库时,失败了。按钮始终在加载状态下冻结。显示记录很好,数据已显示,但在尝试添加新记录或编辑记录时无法显示。对于删除记录,它正在工作 下面是AjaxController.php: <?php class AjaxController extends Controller { public $layout = "null"; public function actionIndex() { $this
AjaxController.php
:
<?php
class AjaxController extends Controller {
public $layout = "null";
public function actionIndex() {
$this -> render('index');
}
public function actionCreate() {
if (Yii::app() -> request -> isAjaxRequest) {
$modelProduk = new Produk;
if ($_POST) {
$modelProduk['nama_produk'] = $_POST['namaproduk'];
$modelProduk['jumlah_produk'] = $_POST['jumlahproduk'];
$modelProduk['harga_produk'] = $_POST['hargaproduk'];
$modelProduk -> save();
}
$this -> render('create');
}
}
public function actionIndexproduk() {
$criteria = new CDbCriteria( array('order' => 'id_produk DESC'));
$count = Produk::model() -> count($criteria);
$pages = new CPagination($count);
$pages -> pageSize = 2;
$pages -> applyLimit($criteria);
$dataProduk = Produk::model() -> findAll($criteria);
$this -> render('indexproduk', array('dataProduk' => $dataProduk, 'pages' => $pages, ));
}
public function actionUpdate($id) {
if (Yii::app() -> request -> isAjaxRequest) {
$dataProduk = Produk::model() -> findByPk($id);
if ($_POST) {
$dataProduk -> nama_produk = $_POST['namaproduk'];
$dataProduk -> jumlah_produk = $_POST['jumlahproduk'];
$dataProduk -> harga_produk = $_POST['hargaproduk'];
$dataProduk -> save();
}
$this -> render('update', array('dataProduk' => $dataProduk));
}
}
public function actionDelete($id) {
if (Yii::app() -> request -> isAjaxRequest) {
Produk::model() -> deleteByPk($id);
}
}
public function actionSearch($criteria = '') {
$criteria = new CDbCriteria( array(
'select' => '*',
'condition' => "nama_produk LIKE '%$criteria%'",
'order' => 'id_produk DESC', ));
$count = Produk::model() -> count($criteria);
$pages = new CPagination($count);
$pages -> pageSize = 2;
$pages -> applyLimit($criteria);
$model = Produk::model() -> findAll($criteria);
$this -> render('indexProduk', array('dataProduk' => $model, 'pages' => $pages));
}
}
?>
<?php
class Produk extends CActiveRecord {
public static function model($className = __CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'produk';
}
public function rules() {
return array(
array('nama_produk ,jumlah_produk, harga_produk', 'required',),
array('jumlah_produk,harga_produk','numerical','integerOnly'=>true,),
);
}
public function attributeLabels() {
return array(
'nama_produk' => 'Nama Produk',
'jumlah_produk'=>'Jumlah Produk',
'harga_produk'=>'Harga Produk',
);
}
}
?>
这是indexproduk.php
中的代码行:
<form action="" method="post" id="formSearch">
<input type="text" name="criteria" id="criteria" />
<input type="button" value="Search" id="buttonSearch" />
</form>
<table border="1" cellpadding="5">
<tr>
<th>Nama Produk</th>
<th>Jumlah Produk</th>
<th>Harga Produk</th>
<th>#</th>
</tr>
<?php foreach ($dataProduk as $produk){?>
<tr>
<td><?php echo $produk -> nama_produk;?></td>
<td><?php echo $produk -> jumlah_produk;?></td>
<td><?php echo $produk -> harga_produk;?></td>
<td>
<a href="#" class="update" id="<?php echo $produk->id_produk;?>">Edit</a> ||
<a href="#" class="delete" id="<?php echo $produk->id_produk;?>">Delete</a>
</td>
</tr>
<?php }?>
</table>
<br>
<?php
$this->widget('CLinkPager', array(
'header'=>'',
'maxButtonCount'=>5,
'pages' => $pages,
))
?>
<script>
$(document).ready(function(){
//search
$("#buttonSearch").click(function(){
var criteria = $('#criteria').val();
$("#data").load('<?php echo Yii::app()->request->baseUrl;?>/ajax/search/criteria/'+criteria);
});
$('li a').click(function(){
/*ambil value dari attribut href
dan load ke <div id=”data” */
$('#data').load($(this).attr('href'));
return false;
});
$('.update').click(function(){
var id =$(this).attr('id');
$('#form').load('<?php echo Yii::app()->request->baseUrl;?>/ajax/update/'+id);
return false;
});
$('.delete').click(function(){
var id =$(this).attr('id');
$.ajax({
type:'POST',
url:'<?php echo Yii::app()->request->baseUrl;?>/ajax/delete/'+id,
success:function(data){
$('#data').load('<?php echo Yii::app()->request->baseUrl;?>/ajax/indexproduk');
}
});
return false;
});
});
</script>
模型Produk.php
:
<?php
class AjaxController extends Controller {
public $layout = "null";
public function actionIndex() {
$this -> render('index');
}
public function actionCreate() {
if (Yii::app() -> request -> isAjaxRequest) {
$modelProduk = new Produk;
if ($_POST) {
$modelProduk['nama_produk'] = $_POST['namaproduk'];
$modelProduk['jumlah_produk'] = $_POST['jumlahproduk'];
$modelProduk['harga_produk'] = $_POST['hargaproduk'];
$modelProduk -> save();
}
$this -> render('create');
}
}
public function actionIndexproduk() {
$criteria = new CDbCriteria( array('order' => 'id_produk DESC'));
$count = Produk::model() -> count($criteria);
$pages = new CPagination($count);
$pages -> pageSize = 2;
$pages -> applyLimit($criteria);
$dataProduk = Produk::model() -> findAll($criteria);
$this -> render('indexproduk', array('dataProduk' => $dataProduk, 'pages' => $pages, ));
}
public function actionUpdate($id) {
if (Yii::app() -> request -> isAjaxRequest) {
$dataProduk = Produk::model() -> findByPk($id);
if ($_POST) {
$dataProduk -> nama_produk = $_POST['namaproduk'];
$dataProduk -> jumlah_produk = $_POST['jumlahproduk'];
$dataProduk -> harga_produk = $_POST['hargaproduk'];
$dataProduk -> save();
}
$this -> render('update', array('dataProduk' => $dataProduk));
}
}
public function actionDelete($id) {
if (Yii::app() -> request -> isAjaxRequest) {
Produk::model() -> deleteByPk($id);
}
}
public function actionSearch($criteria = '') {
$criteria = new CDbCriteria( array(
'select' => '*',
'condition' => "nama_produk LIKE '%$criteria%'",
'order' => 'id_produk DESC', ));
$count = Produk::model() -> count($criteria);
$pages = new CPagination($count);
$pages -> pageSize = 2;
$pages -> applyLimit($criteria);
$model = Produk::model() -> findAll($criteria);
$this -> render('indexProduk', array('dataProduk' => $model, 'pages' => $pages));
}
}
?>
<?php
class Produk extends CActiveRecord {
public static function model($className = __CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'produk';
}
public function rules() {
return array(
array('nama_produk ,jumlah_produk, harga_produk', 'required',),
array('jumlah_produk,harga_produk','numerical','integerOnly'=>true,),
);
}
public function attributeLabels() {
return array(
'nama_produk' => 'Nama Produk',
'jumlah_produk'=>'Jumlah Produk',
'harga_produk'=>'Harga Produk',
);
}
}
?>
仅供参考:我使用的是XAMPP1.8.3,PHP版本为5.5.15,Windows 8和Mozilla Firefox 32.0.1
期待在这里看到专家的建议
编辑:这里是firebug报告
Here what i got from firebug :
<h1>PHP Error [2]</h1>
<p>include(jumlah_produk.php): failed to open stream: No such file or directory (I:\xampp\htdocs\yii\framework\YiiBase.php:427)</p>
<pre>#0 I:\xampp\htdocs\yii\framework\YiiBase.php(427): CWebApplication->handleError()
#1 I:\xampp\htdocs\yii\framework\YiiBase.php(427): autoload()
#2 I:\xampp\htdocs\yii\framework\YiiBase.php(302): autoload()
#3 I:\xampp\htdocs\yii\framework\validators\CValidator.php(186): import()
#4 I:\xampp\htdocs\yii\framework\base\CModel.php(287): createValidator()
#5 I:\xampp\htdocs\yii\framework\base\CModel.php(260): Produk->createValidators()
#6 I:\xampp\htdocs\yii\framework\base\CModel.php(158): Produk->getValidators()
#7 I:\xampp\htdocs\yii\framework\db\ar\CActiveRecord.php(805): Produk->validate()
#8 I:\xampp\htdocs\yiites\protected\controllers\AjaxController.php(18): Produk->save()
#9 I:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(49): AjaxController->actionCreate()
#10 I:\xampp\htdocs\yii\framework\web\CController.php(308): CInlineAction->runWithParams()
#11 I:\xampp\htdocs\yii\framework\web\CController.php(286): AjaxController->runAction()
#12 I:\xampp\htdocs\yii\framework\web\CController.php(265): AjaxController->runActionWithFilters()
#13 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(282): AjaxController->run()
#14 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(141): CWebApplication->runController()
#15 I:\xampp\htdocs\yii\framework\base\CApplication.php(180): CWebApplication->processRequest()
#16 I:\xampp\htdocs\yiites\index.php(12): CWebApplication->run()
</pre>
以下是我从firebug获得的信息:
PHP错误[2]
include(jumlah_produk.php):无法打开流:没有这样的文件或目录(I:\xampp\htdocs\yii\framework\YiiBase.php:427)
#0 I:\xampp\htdocs\yii\framework\YiiBase.php(427):CWebApplication->handleError()
#1 I:\xampp\htdocs\yii\framework\YiiBase.php(427):自动加载()
#2 I:\xampp\htdocs\yii\framework\YiiBase.php(302):自动加载()
#3 I:\xampp\htdocs\yii\framework\validators\CValidator.php(186):import()
#4 I:\xampp\htdocs\yii\framework\base\CModel.php(287):createValidator()
#5 I:\xampp\htdocs\yii\framework\base\CModel.php(260):Produk->createValidators()
#6 I:\xampp\htdocs\yii\framework\base\CModel.php(158):Produk->getValidators()
#7 I:\xampp\htdocs\yii\framework\db\ar\CActiveRecord.php(805):Produk->validate()
#8 I:\xampp\htdocs\yiites\protected\controllers\AjaxController.php(18):Produk->save()
#9 I:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(49):AjaxController->actionCreate()
#10 I:\xampp\htdocs\yii\framework\web\CController.php(308):CInlineAction->runWithParams()
#11 I:\xampp\htdocs\yii\framework\web\CController.php(286):AjaxController->runAction()
#12 I:\xampp\htdocs\yii\framework\web\CController.php(265):AjaxController->runActionWithFilters()
#13 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(282):AjaxController->run()
#14 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(141):CWebApplication->runController()
#15 I:\xampp\htdocs\yii\framework\base\capapplication.php(180):CWebApplication->processRequest()
#16 I:\xampp\htdocs\yiites\index.php(12):CWebApplication->run()
可能您的型号无效。
在保存或处理sav e函数的返回之前,您应该始终验证您的模型,如
500上的错误输出是什么?在index.php中打开调试模式,可能在顶部添加错误报告(E_ALL),并在php.ini中启用启动错误以进行调试
另一个坏主意是在ajax回复中重新注册jquery,这会杀死主页的dom,所以要非常小心
另外->呈现呈现整个html页面。您可能只想在ajax结果上呈现部分,然后返回该部分以替换现有页面内容。因此出现了服务器端错误,当您查看时,服务器日志说了什么?我编辑了问题,添加了firebug的模型代码和报告。Yii正在查找名为
jumlah_produk.php
的文件,该文件不存在。在创建操作中,关于$modelProduk['nama_produk']
的三行应该是$modelProduk->nama_produk
,因为这是模型的一个属性。不知道这是否是错误。@chris---嗨,chris,我现在解决了。实际上,我之前的模型有输入错误,我将函数规则设置为绝对数组,我将所有数组值用“”括起来。这导致ajax停止。现在它可以正常工作了$modelProduk->nama_produk不是错误,对于名为jumlah_produk.php的文件,它是从Yii core自动生成的。如果在第247行打开YiiBase.php,您将看到($className.'.php');顺便说一句,谢谢你的评论。我现在添加了模型,以前忘记添加了。
if($model->save())
// all good
}
else
{
// something bad happened :(
}