PHP代码中断;如果;语句,否则这两个函数独立工作
我在php中有两个函数,用于在网站上显示页面内容 这两个函数都是从页面内部独立工作的,因此我向自己证明的ajax调用中的$\u POST变量都存在 有2个页面,加上按钮,我不会打扰下面的按钮 pages/pages.php(问题陈述在哪里,由ajax从按钮调用) 然后pageDivs()运行,证明infact$page已设置且可用 编辑 我还应该指出,我启动If语句的目的只是为了!=然后后来转到!==而且没有效果 编辑2: 对于Rasclatt,这里是按钮html输出。我必须保留href或我的css中断,但如果需要,我可以删除它并重写我的css:PHP代码中断;如果;语句,否则这两个函数独立工作,php,jquery,ajax,conditional-statements,Php,Jquery,Ajax,Conditional Statements,我在php中有两个函数,用于在网站上显示页面内容 这两个函数都是从页面内部独立工作的,因此我向自己证明的ajax调用中的$\u POST变量都存在 有2个页面,加上按钮,我不会打扰下面的按钮 pages/pages.php(问题陈述在哪里,由ajax从按钮调用) 然后pageDivs()运行,证明infact$page已设置且可用 编辑 我还应该指出,我启动If语句的目的只是为了!=然后后来转到!==而且没有效果 编辑2: 对于Rasclatt,这里是按钮html输出。我必须保留href或我的c
<div id="navCol" class="col-sm-1">
<!--nav in here-->
<ul id="mainNav" class="nav navbar">
<!--beginning of main list-->
<li class="nav navbar navbar-text">
<a id="home" href="#home" data-acton="#home" data-page="home" class="bbutt do-action active"> Home </a>
</li>
<li class="nav navbar navbar-text">
<a id="bio" href="#bio" data-acton="#bio" data-page="bio" class="bbutt do-action inactive"> Biography </a>
</li>
<li>
<div id="accordion1" class="accordion" role="tablist">
<div id="header-card" class="card accordion">
<div class="card-header accordion accordion-header work" role="tab" id="headingOne1">
<h5 class="mb-0"> <a id="work" class="do-action" data-page="work" data-toggle="collapse" data-acton="#work" href="#collapseOne1" role="button" aria-expanded="true" aria-controls="collapseOne1"> Work </a> </h5>
</div>
<div id="collapseOne1" class="collapse accordion" role="tabpanel" aria-labelledby="headingOne1" data-parent="#accordion1">
<div class='card-body accordion accordion-item inactive'>
<a id="install" data-page="install" class="do-action install" href="#install" data-acton="#install" class="subs first">
Installations
</a>
</div>
<div class='card-body accordion accordion-item inactive'>
<a id="write" data-page="write" class="do-action write" href="#write" data-acton="#write" class="subs">
Writing
</a>
</div>
<div class='card-body accordion accordion-item inactive'>
<a id="video" data-page="video" class="do-action video" href="#video" data-acton="#video" class="subs">
Video
</a>
</div>
<div class='card-body accordion accordion-item inactive'>
<a id="photo" data-page="photo" class="do-action photo" href="#photo" data-acton="#photo" class="subs last">
Photography
</a>
</div>
</div>
</div>
</div>
</li>
<li>
<div id="accordion2" class="accordion" role="tablist">
<div id="header-card" class="card accordion">
<div class="card-header accordion accordion-header2 works" role="tab" id="headingTwo1">
<h6 class="mb-0"> <a id="works" class="do-action" data-toggle="collapse" href="#collapseTwo1" data-acton="#workshops" data-page="works" role="button" aria-expanded="true" aria-controls="collapseTwo1">Workshops</a> </h6>
</div>
<div id="collapseTwo1" class="collapse accordion" role="tabpanel" aria-labelledby="headingTwo1" data-parent="#accordion2">
<div class='card-body accordion accordion-item inactive'>
<a id="child" data-page="child" class="do-action child" href="#child" data-acton="#child" class="subs first">
Children
</a>
</div>
<div class='card-body accordion accordion-item inactive'>
<a id="adols" data-page="adols" class="do-action adols" href="#adols" data-acton="#adols" class="subs">
Adolescents
</a>
</div>
<div class='card-body accordion accordion-item inactive'>
<a id="adult" data-page="adult" class="do-action adult" href="#adult" data-acton="#adult" class="subs last">
Adults
</a>
</div>
</div>
</div>
</div>
</li>
<li class="nav navbar navbar-text">
<a id="contact" href="#contact" data-acton="#contact" data-page="contact" class="bbutt do-action inactive"> Contact </a>
</li>
</ul>
</div>
在这里把事情结合起来;这一行的javascript中存在PHP语法异常:
var lang = '<?php echo $_GET['
lang ']; ?>';
var lang='';
尝试将其放在一行上,并删除键名中的空格:
var lang = '<?php echo $_GET['lang']; ?>';
var lang='';
其次,您不应该一遍又一遍地重复JavaScript部分。您可以将其简化为一个ajax函数,然后使用其他DOM元素来表示您对该函数的意图,例如:
<script>
// Wrap your stuff in one function and inject what you need that changes
function doAjaxCall(btn, page, lang)
{
// Set the query string
var dataTosend = 'page=' + page + '&lang=' + lang;
// If is obj do the button stuff
if(btn !== false) {
$('.active').addClass('inactive').removeClass('active');
btn.removeClass('inactive').addClass('active');
}
// Run the ajax and all that jazz
$('.content').fadeOut(500, function() {
$('.content').remove();
$.ajax({
url: "pages/pages.php",
cache: false,
type: 'POST',
data: dataTosend,
async: true,
}).done(function(html) {
$("#contentCol").append(html);
$('.content').fadeIn(1000);
});
});
}
// Set document ready
$(function(){
// Just send the language once, make sure to try and remove any possible
// user hackery...
var lang = '<?php echo htmlspecialchars($_GET["lang"], ENT_QUOTES) ?>';
// Run the default ajax on page load
doAjaxCall(false, 'home', lang);
// Just listen for one element on click now
$(this).on('click', '.do-action', function(){
// If the element that is being clicked is the same one that is going
// to have the .active done to it, then just use $(this) only
doAjaxCall($($(this).data('acton')), $(this).data('page'), lang);
});
});
//Collapse Dropdowns with other buttons
$('.bbutt').click(function() {
$('#collapseOne1').removeClass('show');
$('#collapseTwo1').removeClass('show');
});
$('#work').click(function() {
$('#collapseTwo1').removeClass('show');
});
$('#works').click(function() {
$('#collapseOne1').removeClass('show');
});
//debug
$('#console-debug').hide();
$('#btn-debug').on("click", function() {
$('#console-debug').toggle();
});
</script>
//将您的内容封装在一个函数中,并注入所需的更改
函数调用(btn、page、lang)
{
//设置查询字符串
var dataTosend='page='+page+'&lang='+lang;
//如果是obj做按钮的东西
如果(btn!==假){
$('.active').addClass('inactive').removeClass('active');
btn.removeClass('inactive').addClass('active');
}
//运行ajax和所有的jazz
$('.content').fadeOut(500,function(){
$('.content').remove();
$.ajax({
url:“pages/pages.php”,
cache:false,
键入:“POST”,
数据:dataTosend,
async:true,
}).done(函数(html){
$(“#contentCol”).append(html);
$('.content').fadeIn(1000);
});
});
}
//准备好文件
$(函数(){
//只需发送一次语言,确保尝试删除任何可能的错误
//用户黑客。。。
var lang='';
//在页面加载时运行默认的ajax
doAjaxCall(假,'home',lang);
//只需在单击“立即”时收听一个元素
$(this).on('click','do action',function(){
//如果正在单击的元素与正在单击的元素相同
//要对其执行.active,只需使用$(this)
doAjaxCall($($(this.data('acton')),$(this.data('page'),lang);
});
});
//使用其他按钮折叠下拉列表
$('.bbutt')。单击(函数(){
$('#collapseOne1')。removeClass('show');
$('#collapseTwo1')。removeClass('show');
});
$(“#工作”)。单击(函数(){
$('#collapseTwo1')。removeClass('show');
});
$(“#工作”)。单击(函数(){
$('#collapseOne1')。removeClass('show');
});
//调试
$(“#控制台调试”).hide();
$('#btn debug')。在(“单击”,函数()上){
$(“#控制台调试”).toggle();
});
触发器html如下所示:
<!-- Add the "do-action" class to everything that you want to fire the ajax -->
<!-- Then you can put the page destination in the data attribute -->
<!-- Using $(this) probably would work in the js but, use the acton data attribute to send the intended object to act on -->
<button id="home" class="do-action" data-acton="#home" data-page="home">Home<button>
<button id="install" class="do-action" data-acton="#install" data-page="install">Install<button>
家
安装
无论如何,通过只创建一个函数,您可以减少复制/粘贴错误的机会,并大大清理JS
最后,由于您将所有类型的html/函数/业务/视图登录混合在一起,因此您可能希望通过检查是否存在来包装PHP函数:
if(!function_exists('pageDivs')) {
function pageDivs($dbc, $id, $lang)
{
$r = mysqli_query($dbc, "SELECT * FROM content WHERE page='$id' AND status = 1");
while ($data = mysqli_fetch_assoc($r)): ?>
<div class="content" >
<?php echo ($lang =='FR')? $data['contentfr'] : $data['contenten'] ?>
</div>
<?php endwhile;
}
}
if(!function_exists('blog')) {
function blog($dbc, $lang)
{ ?>
<div class="bgImage homeImg">
<img src="images/bgs/1566337061.jpg">
</div>
<div class="gradient"></div>
<div class="col-md-12">
<?php
$r = mysqli_query($dbc, "SELECT * FROM blog WHERE status = 1 ORDER BY id DESC");
$i=0;
while($data = mysqli_fetch_assoc($r)):
$i++; ?>
<div id="post<?php echo $i; ?>" class="post snap">
<div class="postBox">
<article id="article<?php echo $i; ?>" class="article col-md-7">
<h3><?php echo $data['titleen'] ?></h3>
<?php echo $data['contenten']; ?>
</article>
<div id="pictureFrameLand<?php echo $i; ?>" class="pictureFrameLand col-md-4">
<img src="<?php
$q2 = "SELECT * FROM tbl_images WHERE image_id = ".$data['artimage'];
$r2 = mysqli_query($dbc, $q2);
$src= mysqli_fetch_assoc($r2);
echo $src['urlFront']
?>" />
</div>
<div class="gradientLand col-md-4"></div>
</div>
</div>
<div class="spacer snap"></div>
<?php endwhile ?>
</div>
<?php
}
}
如果(!function_存在('pageDivs')){
函数pageDivs($dbc,$id,$lang)
{
$r=mysqli_查询($dbc,“从内容中选择*,其中页面=“$id”,状态=1”);
而($data=mysqli\u fetch\u assoc($r)):?>
当您第一次加载页面时,它会进入主页,这很好,但是当您单击其他按钮(bio、work等)时,它会获取这两个按钮的内容,因为每次包含js/home.php时,它都会执行下面的ajax函数以及$('#other')。单击。因此,您最终会调用两个ajax
//Ajax Home Page on load
$.ajax({
url: "pages/pages.php",
cache: false,
type: 'POST',
data: dataTosend,
async: true,
}).done(function(html) {
$("#contentCol").append(html);
$('.content').fadeIn(1000);
});
在包含页面之前,我建议您添加额外的flag变量,以跳过对主页的ajax调用
}
if ($page !== 'home'){
pageDivs($dbc, $page, $lang);
} else{
blog($dbc, $lang);
$donotloadhome = true;
include('../js/home.php');
}
在脚本中添加一个变量
var skipflag = '<?php echo ($donotloadhome)?'call':''; ?>';
if(skipflag != 'call')
{
//Ajax Home Page on load
$.ajax({
url: "pages/pages.php",
cache: false,
type: 'POST',
data: dataTosend,
async: true,
}).done(function(html) {
$("#contentCol").append(html);
$('.content').fadeIn(1000);
});
}
var skipflag='';
如果(skipflag!=“调用”)
{
//加载时的Ajax主页
$.ajax({
url:“pages/pages.php”,
cache:false,
键入:“POST”,
数据:dataTosend,
async:true,
}).done(函数(html){
$(“#contentCol”).append(html);
$('.content').fadeIn(1000);
});
}
您是否尝试过调试
if(!function_exists('pageDivs')) {
function pageDivs($dbc, $id, $lang)
{
$r = mysqli_query($dbc, "SELECT * FROM content WHERE page='$id' AND status = 1");
while ($data = mysqli_fetch_assoc($r)): ?>
<div class="content" >
<?php echo ($lang =='FR')? $data['contentfr'] : $data['contenten'] ?>
</div>
<?php endwhile;
}
}
if(!function_exists('blog')) {
function blog($dbc, $lang)
{ ?>
<div class="bgImage homeImg">
<img src="images/bgs/1566337061.jpg">
</div>
<div class="gradient"></div>
<div class="col-md-12">
<?php
$r = mysqli_query($dbc, "SELECT * FROM blog WHERE status = 1 ORDER BY id DESC");
$i=0;
while($data = mysqli_fetch_assoc($r)):
$i++; ?>
<div id="post<?php echo $i; ?>" class="post snap">
<div class="postBox">
<article id="article<?php echo $i; ?>" class="article col-md-7">
<h3><?php echo $data['titleen'] ?></h3>
<?php echo $data['contenten']; ?>
</article>
<div id="pictureFrameLand<?php echo $i; ?>" class="pictureFrameLand col-md-4">
<img src="<?php
$q2 = "SELECT * FROM tbl_images WHERE image_id = ".$data['artimage'];
$r2 = mysqli_query($dbc, $q2);
$src= mysqli_fetch_assoc($r2);
echo $src['urlFront']
?>" />
</div>
<div class="gradientLand col-md-4"></div>
</div>
</div>
<div class="spacer snap"></div>
<?php endwhile ?>
</div>
<?php
}
}
//Ajax Home Page on load
$.ajax({
url: "pages/pages.php",
cache: false,
type: 'POST',
data: dataTosend,
async: true,
}).done(function(html) {
$("#contentCol").append(html);
$('.content').fadeIn(1000);
});
}
if ($page !== 'home'){
pageDivs($dbc, $page, $lang);
} else{
blog($dbc, $lang);
$donotloadhome = true;
include('../js/home.php');
}
var skipflag = '<?php echo ($donotloadhome)?'call':''; ?>';
if(skipflag != 'call')
{
//Ajax Home Page on load
$.ajax({
url: "pages/pages.php",
cache: false,
type: 'POST',
data: dataTosend,
async: true,
}).done(function(html) {
$("#contentCol").append(html);
$('.content').fadeIn(1000);
});
}