如何通过ajax从下拉列表中获取值并将其发送到php?
我有一些类别名称的下拉列表,我想使用ajax获取所选类别的名称,并将它们发送到ajax脚本所在的php页面,下面是我的新代码: 创建操作代码:如何通过ajax从下拉列表中获取值并将其发送到php?,php,jquery,ajax,yii,Php,Jquery,Ajax,Yii,我有一些类别名称的下拉列表,我想使用ajax获取所选类别的名称,并将它们发送到ajax脚本所在的php页面,下面是我的新代码: 创建操作代码: public function actionCreate() { $model=new News; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($mo
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>
$(“#类别”)。更改(函数(){
var category=$(this.val();
$.ajax({
url:“/tonyward/index.php/news/create”,
数据:{category:category},
类型:'POST',
数据类型:'html',
成功:功能(数据){
console.log(data.category)
},
缓存:false
});
});
现在,第二个下拉列表的数据将如何更改
旧代码:
$(“#类别”)。更改(函数(){
$(“#类别”)。更改(函数(){
var category=$(this.val();
$.ajax({
url:window.location.href,
类型:'GET',
数据:{category:category},
数据类型:'json',
cache:false,
成功:功能(数据){
},
});
});
select
标记没有href
因此this.href
不会为您的AJAX生成有效的URL。您知道页面AJAX调用会返回整个页面加警报(“完成”)
?它实际上是而不是数据类型选项指定的json
。因此,我希望会出现解析错误,并且不会触发。错误处理程序。如果调用是成功完整的,则不会呈现返回的内容…因此你不会看到警报
建议
更改PHP脚本,以便在设置类别
时,仅返回if
块中的代码
不要使用alert('done');
只需使用done
==>`echo“done”
在success
处理程序中,包含警报(数据)
将数据类型
更改为文本
包括一个错误处理程序
以防万一
当根据客户端代码提问时,包含相关部分的HTML(由浏览器呈现)通常会有所帮助而不是服务器端代码。我不知道PHP代码中的类别是什么:id
或name
…许多其他人可能也有同样的问题,并且会避免这个问题
我是如何解决我的问题的
我创建了一个名为selectedCategory()
的函数
selectedCategory()
是renderPartial
下拉列表的html代码,该代码写在_categoryItems.php中
我在更改第一个下拉类别(“#category”)
时调用了一个ajax函数
ajax函数将被发布到selectedCategory()
,最后它将加载特定div中的html数据(如果成功)
代码如下:
表单和ajax函数代码:
\u类别项目
代码:
注意:我用js代码显示和隐藏了一些元素。您的具体问题是什么?您知道页面AJAX调用返回整个页面加上警报('done')吗;
?这确实不是数据类型所指定的json
。因此,我预计将出现解析错误,并且不会触发。错误处理程序。如果调用成功,您不会呈现返回的内容…因此您不会看到警报。请尝试在注释中添加此类注释,这不是一个答案,尽管我投了更高的票。@MD.MD这肯定是一个有效的答案。请解释为什么不是。您没有确定您的问题是什么,也没有提供任何关于问题的疑难解答信息或细节,因为这不是一个完整的答案。它与问题一样完整。尝试提供帮助,但因为您没有指定问题所在您的问题是,这部分代码将失败。我的问题是PHP代码未收到var类别
。您对问题的最新编辑已使所有评论和答案变得无关紧要。我希望您将原始问题恢复为新问题,但这只是我的问题。或者,您可以编辑您的问题以这样一种方式显示它的各种版本。
<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>";
}
?>
<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>
public function actionSelectedCategory(){
if(Yii::app()->request->isAjaxRequest){
$category = $_POST['category'];
$this->renderPartial('_categoryItems', array(
'category'=>$category
));
}
}
<?php $data = CHtml::listData($category::model()->findAll(), 'id', 'thumbtitle'); ?>
<?php echo CHtml::dropDownList('subcategory', '', $data); ?>