Php 我必须单击两次才能让Ajax正常工作
我正在为学校的时间表制定时间表 在该站点上,有一个jquery ui日期选择器,可以单击它来更新时间表(基于在日期选择器上单击的日期) 除了我必须点击两次来更新时间表之外,一切都正常。因此,每隔单击一次即可完成任务。 我把问题缩小到几点:Php 我必须单击两次才能让Ajax正常工作,php,ajax,jquery-ui,caching,jquery-ui-datepicker,Php,Ajax,Jquery Ui,Caching,Jquery Ui Datepicker,我正在为学校的时间表制定时间表 在该站点上,有一个jquery ui日期选择器,可以单击它来更新时间表(基于在日期选择器上单击的日期) 除了我必须点击两次来更新时间表之外,一切都正常。因此,每隔单击一次即可完成任务。 我把问题缩小到几点: 缓存-浏览器将缓存的数据用于时间表 PHP端的缓存-我可能没有设置正确的标题来告诉浏览器不要缓存数据-尝试了几个标题-可能我做错了 我必须将Ajax选项缓存设置为false-尝试过-不起作用 我可能需要使呼叫同步,以便浏览器等待响应-对此不确定-尽管尝试了它
任何帮助都将不胜感激。谢谢你有几件事你没有提到,所以我想问一下你是否试过(或者知道):1)没有
session\u start
调用PHP代码。2) AJAX代表异步JavaScript和XML,单击一次,等待回复。。。您可能在请求仍在处理时再次单击。3) 无内容类型头:头('content-type:application/json')代码>,因此jQuery可以正确处理数据。4) 您是否在AJAX成功回调中尝试了几个console.log()
调用?5) 确保PHP脚本不包含前导字符,并且在结尾处没有结束标记?>
,最后:如果您正确设置了内容类型头,则无需将数据类型:'json'
传递到$.ajax
,因为jQ将“猜测”类型。它非常擅长这样做,特别是如果您明确地设置content-type头,那么您是如何调试ajax调用不起作用的?onselect事件是否在第一次尝试时被触发?ajax是在第一次调用时发送数据还是不返回任何内容?调试的内容和方式?Onselect在第一次选择时激发。Ajax正在返回数据。PHP正在发回数据,但我必须点击两次才能真正使用新数据。嘿,伙计们,很抱歉打扰你们。我想出来了。因为我是通过在php类中传递构造函数来实现的,所以我并没有得到相关的数据。谢谢你花时间。
onSelect: function (date) {
//defined your own method here
// $("#timTableMon").empty();
// $("#timTableTue").empty();
// $("#timTableWen").empty();
// $("#timTableThur").empty();
// $("#timTableFr").empty();
$.ajax({
url : 'ajaxDate.php',
dataType: 'json',
cache: false,
type : 'post',
data : {
'sendDate' : date
},
success : function(data, status) {
$("#weekHeader").text(data.week);
$("#timTableMon").html(data.Mon);
$("#timTableTue").html(data.Tue);
$("#timTableWen").html(data.Wen);
$("#timTableThur").html(data.Thur);
$("#timTableFr").html(data.Fr);
// location.reload();
// window.location.href = "http://localhost /timeTable /public/test.php";
},
error : function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
}); // end ajax call
$date = $_POST['sendDate'];
// $log->log_action("date from ajax", $date);
$date = new DateTime($date);
$week = $date->format("W");
// $log->log_action("week from ajax", $week);
// $log->log_action("week from ajax", $week);
$_SESSION['week'] = $week;
$timetable->week = $week;
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.
$messages = array();
$messages['week'] = $week;
$messages['Mon'] = $timetable->drawMon();
$messages['Tue'] = $timetable->drawTue();
$messages['Wen'] = $timetable->drawWen();
$messages['Thur'] = $timetable->drawThur();
$messages['Fr'] = $timetable->drawFr();
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
echo json_encode($messages);