【问题标题】:Variable not updated in time with Ajax callAjax 调用未及时更新变量
【发布时间】:2012-05-23 00:17:48
【问题描述】:

我缩小了我之前提出的一个问题的范围,发现了问题所在,但无法解决。

我有一个变量需要在下一个事件触发之前在一个事件函数中设置。

这不会发生,因为我通过 Ajax 调用检索变量。即使我认为我的所有 ajax 设置都正确(?) - 它不会发生。我在 Firebug 中使用控制台日志记录,其中带有“2”的控制台日志会在应该首先创建的其他日志条目之前记录(其中带有“1”)。

它是 datepicker 实例的一部分,带有 ajax 调用。完整代码如下。顺便说一句——我已经取出了 ajax 调用,并插入了一个硬编码变量进行测试——它工作得很好。所以是 ajax 不能正常工作。

变量 'varDate' 在文档就绪函数之外声明:

<script type='text/javascript'>
 var varDate = 'toby';
$(document).ready(function(){

...以及这里的主要代码

$('.subject-date-pick').datetimepicker({
    timeFormat: 'hh:mm:ss',
    startDate:'01/01/1996',
    clickInput:true,
    beforeShow: function(input,inst) {

        var source = $("#" + inst.id).attr('source');
        var source_id = $("#" + inst.id).attr('source_id');
        var thing = $.ajax({
            type: 'GET', 
            url: 'ajax_get_unavailable_dates.php',
            dataType: 'text',
            async: 'false',
            global: 'false',
            data: {
                source_type: source,
                source_db_id: source_id
                  },
            success: function(msg) {


                console.log("1 - got the result");

                varDate = (msg)
            }
        });
        console.log("2 - ajax complete - logging console");     
        console.log("Post Ajax"+varDate);

    },

控制台在这里所做的是首先错误地记录变量(使用 SECOND 记录事件),然后触发日期选择器的下一个事件。之后,变量 IS 更新——随后单击 datepicker 字段将设置正确的变量——但这为时已晚且不好。

所以:控制台结果:

获取 Ajax 调用请求

2 - ajax 完成 - 日志控制台

发布 Ajaxtoby

1 - 得到结果

...

有人帮忙吗?

【问题讨论】:

    标签: jquery ajax datepicker


    【解决方案1】:

    我猜这是因为'false' == true :)

    使用async: false; 作为$.ajax ajax 选项再试一次。

    【讨论】:

    • 哇 - 这一定是愚蠢的记录。谢谢!
    【解决方案2】:

    尝试async:false 而不是async:'false'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2014-07-11
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多