我具有一些特定问题的Ajax更新功能,我敢肯定,只需进行一些调整即可使其100%奏效。
我将尽力总结以下问题。
我有两个相互交互的文件:
我的Ajax尝试根据所单击的按钮更新表int值。否= 0,是= 1,取消= 2。
orders.php
页面开始
<?php
session_start();
require_once('orders-claimed.vc.php');
?>
按钮的表格列:
<td data-target="scheduled">
<input id='userId' type='hidden'/>
<?php
if ($rowOrder['scheduled'] == 1) {
?>
<a href="#" data-role="update" data-id="<?php echo $rowOrder['orderid'] ;?>"><button class="btn-success">YES</button></a>
<?php
} else if ($rowOrder['scheduled'] == 0) {
?>
<a href="#" data-role="update" data-id="<?php echo $rowOrder['orderid'] ;?>"><button class="btn-danger">NO</button></a>
<?php
} else if ($rowOrder['scheduled'] == 2) {
?>
<a href="#" data-role="update" data-id="<?php echo $rowOrder['orderid'] ;?>"><button class="btn-warning">CANCELLED</button></a>
<?php
}
?>
</td>
用于与表格互动的模式
<!-- Modal content-->
<div class="modal-content" style="width: 300px; margin: 0 auto;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<a href="#" id="update_yes" class="btn btn-success text-center center-block">YES</a><br>
<a href="#" id="update_no" class="btn btn-danger text-center center-block">NO</a><br>
<a href="#" id="update_cancelled" class="btn btn-warning text-center center-block">CANCEL</a>
</div>
</div>
</div>
</div>
ajax代码
<script>
$(document).ready(function(){
// append values in input fields
$(document).on('click','a[data-role=update]',function(){
var id = $(this).data('id');
var scheduled = $('#'+id).children('td[data-target=scheduled]').text();
$('#userId').val(id);
$('#myModal').modal('toggle');
});
// now create event to get data from fields and update in database
$('#update_no').click(function(){
var id = $('#userId').val();
var scheduled = 0;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href="#"><button class="btn-danger">NO</button></a>');
$('#myModal').modal('toggle');
}
});
});
$('#update_yes').click(function(){
var id = $('#userId').val();
var scheduled = 1;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href="#"><button class="btn-success">YES</button></a>');
$('#myModal').modal('toggle');
}
});
});
$('#update_cancelled').click(function(){
var id = $('#userId').val();
var scheduled = 2;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href="#"><button class="btn-warning">CANCELLED</button></a>');
$('#myModal').modal('toggle');
}
});
}); });
</script>
请注意,以上所有代码都在同一个文件(orders.php)中
这些是我在页面中的扩展名。大多数都存储在文件夹中并正在链接。
<script src="../_lib/v/jquery.slim.min.js"></script>
<script src="../_lib/v/bootstrap/js/bootstrap.js"></script>
<script src="../_lib/v/jquery-ui/jquery-ui.js"></script>
<script src="../_lib/v/jscolor/jscolor.js"></script>
<script src="js/cms.js"></script>
<link href="../_lib/v/bootstrap/css/bootstrap.min.css" rel="stylesheet">
Ajax在slim.min.js下无法运行,并显示“不是函数错误”,因此我将其从https://code.jquery.com/jquery-3.3.1.js更改为常规版本的jquery
问题
如果我切换到完整版的jquery,则该列会更新,但是会话(已登录的用户)会结束并自动注销。为什么会这样?
我的第二个问题是orders-claimed.vc.php文件
db.php
<?php
class config_db {
public function init() {
$db = new PDO('*MY DATABASE DETAILS GO HERE*');
date_default_timezone_set('Hongkong');
return $db;
}
}
?>
orders.claimed.vs.php
连接到数据库:
$routePath = "../";
require_once($routePath . "_config/db.php");
$dbConfig = new config_db();
$db = $dbConfig->init();
SQL更新
if(isset($_POST['id'])){
$orderid = $_POST['id'];
$scheduled = $_POST['scheduled'];
$stmt = $db->prepare("UPDATE order SET scheduled = '$scheduled' WHERE orderid = '$orderid'");
$stmt->execute(); }
问题
上面的SQL代码不会更新表(如屏幕快照所示),但是ajax只是从成功函数中更新按钮的外观(当页面刷新时,它会返回其原始值)。我想知道是什么问题。它应该连接到按钮,因为它使用的是“ if(isset($ _ POST ['id']))”。
希望我能为我的两个问题提供清晰的解释,谢谢您的帮助。
更新 我使用以下代码检查按钮更新是否存在错误:
console.log( 'scheduled: ' + scheduled + ' orderid: ' + $('#userId').val() );
当按钮更新并且页面刷新也注销了会话时,出现以下错误:
jquery-ui.js:1951 Uncaught TypeError: Cannot read property 'step' of undefined
at String.<anonymous> (jquery-ui.js:1951)
at each (jquery.slim.min.js:2)
at Function.color.hook (jquery-ui.js:1913)
at jquery-ui.js:1963
at jquery-ui.js:2005
at jquery-ui.js:14
at jquery-ui.js:16
答案 0 :(得分:1)
从您列出的内容来看,我认为您可能在您的php文件中的某个位置具有“ session_destroy()”(尽管可能未在此处放置)。尝试将其注释掉,看看会话是否结束。希望对您有帮助:)。