Javascript PHP登录脚本无重定向和更新div
我正在尝试获取一个登录页面来运行一个php脚本(使用API向服务器发送一个curl请求)并返回一个JSON响应,在使用登录脚本之后,我不希望页面刷新。我只想刷新整个导航栏 目前,它通过AJAX,不加载php页面,这部分工作正常。任何指导都将不胜感激 我正在使用以下命令: 引导3.1.1 PHP5.4 引导导航格式Javascript PHP登录脚本无重定向和更新div,javascript,php,jquery,ajax,twitter-bootstrap,Javascript,Php,Jquery,Ajax,Twitter Bootstrap,我正在尝试获取一个登录页面来运行一个php脚本(使用API向服务器发送一个curl请求)并返回一个JSON响应,在使用登录脚本之后,我不希望页面刷新。我只想刷新整个导航栏 目前,它通过AJAX,不加载php页面,这部分工作正常。任何指导都将不胜感激 我正在使用以下命令: 引导3.1.1 PHP5.4 引导导航格式 <nav class="navbar navbar-inverse navbar-fixed-bottom" role="navigation"> <div cl
<nav class="navbar navbar-inverse navbar-fixed-bottom" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<? if(isset($_SESSION['account'][0])){
echo $_SESSION['account'][0];
}
?>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li class="divider"></li>
<?
if(isset($_SESSION['loggedin'])&&$_SESSION['loggedin']=='true')
{
echo "<li><a href='logout.php'>Logout</a></li>";
}else{
?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Login<b class="caret"></b></a>
<div class="dropdown-menu" style="padding: 15px; padding-bottom: 0px;">
<script type="text/javascript" src="js/ajaxform.js"></script>
<form action="login.php" method="post" class="ajaxform">
<label value="Email">Email</label>
<input id="email" style="margin-bottom: 15px;" type="text" name="email" size="30" value=<? echo $email;?> />
<label value="Password">Password</label>
<input id="password" style="margin-bottom: 15px;" type="password" name="password" size="30" value=<?php echo $password;?> />
<label value="environment">Environment</label>
<?
echo "<select name='environment' style='margin-bottom: 15px;' />";
if(isset($_SESSION['environment']) && $_SESSION['environment']=="Prod"){
echo "<option>Demo</option>";
echo "<option selected='true'>Prod</option>";
}elseif(isset($_SESSION['environment']) && $_SESSION['environment']=="Demo"){
echo "<option selected='true'>Demo</option>";
echo "<option>Prod</option>";
}else{
echo "<option>Demo</option>";
echo "<option>Prod</option>";
}
?>
</select>
<li class="divider"></li>
<input class="btn btn-primary" style="clear: left; width: 100%; height: 32px; font-size: 13px; margin-bottom: 15px;" type="submit" name="commit" value="Sign In" />
</form>
</div>
</li>
<?
}
?>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
Login.php
<?
$email = $_POST['email'];
$password = $_POST['password'];
//curl request here!!
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status == 200) {
$_SESSION['account'] = json_decode($json_response);
$_SESSION['loggedin'] = 'true';
}else{
$_SESSION['loggedin'] = 'false';
}
curl_close($curl);
您可以做的是将导航条形码放入一个单独的PHP文件中,我们将其称为navbar.PHP
。然后,通过以下操作将其包含在您的主页上(我们在导航栏周围添加了一个div,以便稍后更新内容):
和JS代码,以:
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
data : $(this).serialize(),
success : function( data ) {
// load new navbar
$('#navbar-holder').html( data );
},
error : function(){
alert('Something wrong');
}
});
如有必要,请随意更改。session_start()代码>加载到所有页面?是的,经过一点调试,我找到了前半部分。我只需要做下半场。我会马上更新我的问题。所以我只需要弄清楚如何在AJAX调用时刷新导航栏内容。这非常有效,我如何获得非表单帖子的链接来进行相同的调用?比如,如果我想以href(非表单)的形式调用logout.php,我会怎么做?只需在注销页面中使用和,销毁会话session\u destroy()
以删除会话。然后将用户重定向回某个页面。页面上运行了查询,我正在尝试刷新会话和导航栏。然后,您可以使用logout.php执行类似的操作。只需更改代码中的if
语句即可销毁会话,然后加载导航栏,就像我们对login.php所做的那样。您可以使用触发对logout.php的ajax调用。
<div id="navbar-holder">
<?php include 'navbar.php'; ?>
</div>
if ($status == 200) {
$_SESSION['account'] = json_decode($json_response);
$_SESSION['loggedin'] = 'true';
include 'navbar.php';
} else {
$_SESSION['loggedin'] = 'false';
}
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
data : $(this).serialize(),
success : function( data ) {
// load new navbar
$('#navbar-holder').html( data );
},
error : function(){
alert('Something wrong');
}
});