Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只有一个函数可以等待AJAX调用,而无需同步AJAX(SJAX)_Php_Ajax_Jquery_Wait - Fatal编程技术网

Php 只有一个函数可以等待AJAX调用,而无需同步AJAX(SJAX)

Php 只有一个函数可以等待AJAX调用,而无需同步AJAX(SJAX),php,ajax,jquery,wait,Php,Ajax,Jquery,Wait,我正在网页上创建动态待办事项列表。在页面上有一个用于注册todo的表单和一个显示所有注册todo的表格。其思想是在表单中注册您想要完成的事情,点击submit按钮,然后todo列表表将自动更新为最新注册的todo。我的脚本管理所有这些,除了自动更新最新注册的todo。 这是我的密码: $(document).ready( function() { $('#todo_registration input[type="submit"]').click(func

我正在网页上创建动态待办事项列表。在页面上有一个用于注册todo的表单和一个显示所有注册todo的表格。其思想是在表单中注册您想要完成的事情,点击submit按钮,然后todo列表表将自动更新为最新注册的todo。我的脚本管理所有这些,除了自动更新最新注册的todo。 这是我的密码:

        $(document).ready( function() {
            $('#todo_registration input[type="submit"]').click(function(evt){
                evt.preventDefault();

                var todo = $('#todo_registration input[name="daily_todo"]').val();
                $('#todo_registration input[name="daily_todo"]').val(null);

                $.when( registerTodo(todo) )
                    .then (
                        updateTodoDisplay()
                    );
            });
        });

        function updateTodoDisplay() {
            $.post("./daily_todo_display.php", null, replaceTbodyHTML);
        }

        function replaceTbodyHTML(data) {
            $('#todo_display_table tbody').html(data);
        }

        function registerTodo(todo) {
            var parameters = {
                daily_todo: todo,
                registration_button: 'clicked'
            };

            $.post("./daily_todo_registration.php", parameters); //, printRegistrationStatus);
        }
我已检查脚本是否在数据库中成功注册todo。获取更新的todo列表的php脚本也可以工作。我认为,我的问题是函数updateTodoDisplay()在运行之前不会等待registerTodo()中的AJAX调用成功完成。但我认为我使用的#.when()应该让updateTodoDisplay()等待

我知道使AJAX调用同步可能会解决我的问题,但在我看来,这是一个糟糕的解决方案。我只希望这一个也是唯一的函数等待AJAX调用完成。因此,我希望网页的其余部分在进行这些调用时正常工作


有人知道我的问题的解决方法吗?Thnx.

您应该$.发布数据,服务器端更新完成后,也从服务器端响应-将文本/json/xml发送回UI。使用它保存一个(第二个)请求,保持ajax异步,使代码更短/更易于维护,并消除了这个问题。=)

您所需要做的就是找出您的服务器端响应


祝您愉快!=)

您应该$.发布数据,服务器端更新完成后,也从服务器端响应-将文本/json/xml发送回UI。使用它保存一个(第二个)请求,保持ajax异步,使代码更短/更易于维护,并消除了这个问题。=)

您所需要做的就是找出您的服务器端响应


祝您愉快!=)

您所需要的是可能的,但代码中似乎有错误

改变

.then (
     updateTodoDisplay()
);

甚至

.then (updateTodoDisplay);

问题是,在注册回调时,在当前代码中传递的是执行
updateTodoDisplay()
的结果,而不是将其作为函数传递。这就是为什么您可以立即执行它。

您需要的是可能的,但看起来您的代码中有一个错误

改变

.then (
     updateTodoDisplay()
);

甚至

.then (updateTodoDisplay);

问题是,在注册回调时,在当前代码中传递的是执行
updateTodoDisplay()
的结果,而不是将其作为函数传递。这就是为什么要立即执行它。

锐利的眼睛!=)不错,伙计!=)+谢谢!我纠正了它,还从registerTodo函数返回了jqXHR对象,它工作得非常完美!非常感谢=DSharp eyes!=)不错,伙计!=)+谢谢!我纠正了它,还从registerTodo函数返回了jqXHR对象,它工作得非常完美!非常感谢