我有一些类别名称的下拉列表,我想通过使用ajax获取所选类别的名称并将它们发送到ajax脚本所在的同一个php页面,这里是我的 < em>新代码 :
创建行动代码:
public function actionCreate()
{
$model=new News;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['category']))
$category = $_POST['category'];
else
$category = NULL;
if(isset($_POST['News']))
{
$model->attributes=$_POST['News'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model, 'category'=>$category
));
}
表单代码:
<div class="row">
<?php echo CHtml::label('Choose category to add from',''); ?>
<?php $data = array('celebrities'=>'Celebrities', 'events'=>'Events', 'videos'=>'Videos', 'editorials'=>'Editorials'); ?>
<?php echo CHtml::dropDownList('category', '', $data); ?>
</div>
<script type="text/javascript">
$("#category").change(function(){
var category = $(this).val();
$.ajax({
url:'/tonyward/index.php/news/create',
data:{category:category},
type:'POST',
dataType:'html',
success:function(data) {
console.log(data.category)
},
cache:false
});
});
</script>
<div class="row">
<?php echo $form->labelEx($model,'idItem'); ?>
<?php $data = array('celebrities'=>$category); ?>
<?php echo CHtml::dropDownList('subcategory', '', $data); ?>
<?php echo $form->error($model,'idItem'); ?>
</div>
现在第二个下拉列表的数据应该如何更改?
旧代码:
<div class="row">
<?php echo CHtml::label('Choose category to add from',''); ?>
<?php $data = array('celebrities'=>'Celebrities', 'events'=>'Events', 'videos'=>'Videos', 'editorials'=>'Editorials'); ?>
<?php echo CHtml::dropDownList('category', '', $data); ?>
</div>
<script type="text/javascript">
$("#category").change(function(){
$("#category").change(function(){
var category = $(this).val();
$.ajax({
url:window.location.href,
type:'GET',
data:{category:category},
dataType:'json',
cache:false,
success:function(data){
},
});
});
</script>
<?php
if(isset($_GET['category'])){
$category = $_GET['category'];
echo "<script>alert('done');</script>";
}
?>
答案 0 :(得分:1)
select
代码没有href
,因此this.href
不会为您的AJAX生成有效的网址。
答案 1 :(得分:1)
您知道您的页面AJAX调用返回整个页面加<script>alert('done');</script>
吗?这是json
选项指定的 NOT dataType
。因此,我希望会有parse error
并且没有.error
处理程序可以触发。如果呼叫是success
,你不会渲染返回的内容 ...因此你不会看到警报。
<强>建议强>
category
时仅返回if
块中的代码<script>alert('done');</script>
只使用done
==&gt; `echo“done”success
处理程序中包含alert( data )
dataType
更改为text
error
处理程序以防万一。category
是什么:id
或name
......还有许多其他人可能会遇到同样的问题而且会避免这个问题。答案 2 :(得分:0)
我是如何解决我的问题的?
selectedCategory()
。selectedCategory()
是renderPartial
下拉列表的html代码,用_categoryItems.php编写。('#category')
时调用了ajax函数。selectedCategory()
,最后它将在特定div中加载html数据(成功时)。这是代码:
表单和ajax函数代码:
<div class="row">
<?php echo CHtml::label('Choose category to add from',''); ?>
<?php $data = array('Celebrities'=>'Celebrities', 'Events'=>'Events', 'Videos'=>'Videos', 'Editorials'=>'Editorials'); ?>
<?php echo CHtml::dropDownList('category', '', $data, array(
'empty'=>'select category'
)); ?>
</div>
<script type="text/javascript">
$(function() {
document.getElementById('itemslabel').style.display='none';
});
$("#category").change(function(){
document.getElementById('itemslabel').style.display='block';
var category = $(this).val();
if(category === ''){
document.getElementById('items').style.display='none';
}
else{
$.ajax({
url:'/tonyward/index.php/news/selectedCategory',
data:{category:category},
async:true,
type:'POST',
dataType:'html',
success:function(data) {
document.getElementById('items').style.display='block';
$('#categoryItems').html(data);
},
cache:false
});
}
});
</script>
<div class="row" id="items">
<?php echo $form->labelEx($model,'idItem', array('id'=>'itemslabel')); ?>
<div id="categoryItems"></div>
<?php echo $form->error($model,'idItem'); ?>
</div>
操作selectedCategory
代码:
public function actionSelectedCategory(){
if(Yii::app()->request->isAjaxRequest){
$category = $_POST['category'];
$this->renderPartial('_categoryItems', array(
'category'=>$category
));
}
}
_categoryItems
代码:
<?php $data = CHtml::listData($category::model()->findAll(), 'id', 'thumbtitle'); ?>
<?php echo CHtml::dropDownList('subcategory', '', $data); ?>
注意:我通过我的js代码显示并隐藏了一些元素。