Jquery使用php ajax在选择更改时重新加载div内容
好的,这是我的代码 portfolio.phpJquery使用php ajax在选择更改时重新加载div内容,php,jquery,ajax,Php,Jquery,Ajax,好的,这是我的代码 portfolio.php <select name="portfolio" id="portfolio_dropdown" class="service-dropdown"> <?php foreach($years as $year){ ?> <option value="<?php echo $year['year']; ?>">
<select name="portfolio" id="portfolio_dropdown" class="service-dropdown">
<?php foreach($years as $year){ ?>
<option value="<?php echo $year['year']; ?>"><?php echo $year['year']; ?></option>
<?php } ?>
</select>
<div class="loading"></div>
<div id="portfolio">
<div id="port-cont">
<?php foreach($portfolios as $portfolio){ ?>
<div class="video">
<div class="play">
<a href="http://www.youtube.com/v/<?php echo $portfolio['url']; ?>">Play</a>
</div>
<iframe src="http://www.youtube.com/v/<?php echo $portfolio['url']; ?>"frameborder="0" allowfullscreen></iframe>
<h3><?php echo $portfolio['title']; ?></h3>
<p><?php echo $portfolio['text']; ?></p>
</div>
<?php } ?>
</div>
</div>
我的投资组合控制器文件
if(isset($_POST['year'])){
include_once "../../system/validation.php";
include_once "../model/DataBase.php";
include_once "../model/Display.php";
$year = integer($_POST['year']);
$get_portfolio_data = new Display("portfolio");
$portfolios = $get_portfolio_data->getDataByColumnName("year",$year);
include_once "../view/themes/default/template/portfolio_data.php";
exit();
}
我的投资组合文件我第一次用另一个函数得到我的数据,我最后一年的2014年投资组合数据
因此,当我更改年份时,我调用控制器文件以获取与该年份相关的数据
我这里的问题是如何返回我从控制器文件中获得的$Portfolio,这样我就不必像以前那样更改模板文件代码或包含另一个文件
我的意思是我需要重新加载portfolio.php模板内容
我试过这样的东西
$("body").on('change','#portfolio_dropdown',function(){
var year = $(this).val();
$.ajax({
type: "POST",
url: "catalog/controller/portfolio.php",
data: "year="+year,
beforeSend: function(){
$(".loading").show();
$("#portfolio").hide();
},
success: function(portfolio_data){
$(".loading").hide();
$("#portfolio").show().load("portfolio" + " #port-cont");
}
});
});
但我不知道如何在不包含另一个模板文件的情况下将新的$Portfolions数据发送到同一个div
事实上,我有点困惑如何正确地做到这一点
因此,我希望您得到了我想要做的:您可以创建一个单独的portfolio-div.php文件,该文件只包含要替换的代码,并从$.ajax调用中调用它
或者,您可以向portfolio.php添加一个$_GET参数,如?skiptemplate=1,以便在使用该参数调用文件时,从ajax调用文件时跳过周围的模板标记
如果您没有机会更改服务器端代码,则可以再次加载整个模板文件,但只提取port cont部分以替换现有内容。不要使用本身会调用URL的load,而是使用html:
虽然这将插入所有HTML,但不只是端口cont部分
只需将参数传递到html中我已经完成了portfolio-div.php,因为它包含在我的控制器文件中,但问题是我无法在加载的数据上使用jquery代码,我的portfolio_data.php文件的代码与我的portfolio div中的代码相同,但我不能在新加载的数据上使用jquery函数。这里存在的问题是,当我从控制器文件中包含新模板文件时,我不能在新数据上使用jquery函数
$("body").on('change','#portfolio_dropdown',function(){
var year = $(this).val();
$.ajax({
type: "POST",
url: "catalog/controller/portfolio.php",
data: "year="+year,
beforeSend: function(){
$(".loading").show();
$("#portfolio").hide();
},
success: function(portfolio_data){
$(".loading").hide();
$("#portfolio").show().load("portfolio" + " #port-cont");
}
});
});
$("#portfolio").show().html(portfolio_data);
$("#portfolio").html(portfolio_data)