Php 我必须单击两次才能让Ajax正常工作

Php 我必须单击两次才能让Ajax正常工作,php,ajax,jquery-ui,caching,jquery-ui-datepicker,Php,Ajax,Jquery Ui,Caching,Jquery Ui Datepicker,我正在为学校的时间表制定时间表 在该站点上,有一个jquery ui日期选择器,可以单击它来更新时间表(基于在日期选择器上单击的日期) 除了我必须点击两次来更新时间表之外,一切都正常。因此,每隔单击一次即可完成任务。 我把问题缩小到几点: 缓存-浏览器将缓存的数据用于时间表 PHP端的缓存-我可能没有设置正确的标题来告诉浏览器不要缓存数据-尝试了几个标题-可能我做错了 我必须将Ajax选项缓存设置为false-尝试过-不起作用 我可能需要使呼叫同步,以便浏览器等待响应-对此不确定-尽管尝试了它

我正在为学校的时间表制定时间表

在该站点上,有一个jquery ui日期选择器,可以单击它来更新时间表(基于在日期选择器上单击的日期)

除了我必须点击两次来更新时间表之外,一切都正常。因此,每隔单击一次即可完成任务。

我把问题缩小到几点:

  • 缓存-浏览器将缓存的数据用于时间表
  • PHP端的缓存-我可能没有设置正确的标题来告诉浏览器不要缓存数据-尝试了几个标题-可能我做错了
  • 我必须将Ajax选项缓存设置为false-尝试过-不起作用
  • 我可能需要使呼叫同步,以便浏览器等待响应-对此不确定-尽管尝试了它
  • 我在jQueryUIDatePicker onselect选项中进行ajax调用。像这样:

    Jquery Ajax代码 PHP代码
    任何帮助都将不胜感激。谢谢你

    有几件事你没有提到,所以我想问一下你是否试过(或者知道):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);