php - ajax 问题 - 数据预置/附加中的一键延迟

Posted

技术标签:

【中文标题】php - ajax 问题 - 数据预置/附加中的一键延迟【英文标题】:php - ajax issue - One Click Delay in Data Prepending/Appending 【发布时间】:2014-03-13 00:51:57 【问题描述】:

我正在尝试从用户那里获取数据并将其插入数据库,然后再次从同一数据库中获取所有新数据并添加到内容框。一切都很好,我只得到想要的数据。但是当我写帖子并单击提交按钮时,它会在数据库中插入数据,但不会添加新数据。但是当我再次写一篇新文章并单击提交时,它会在“最后一篇文章”之前添加意味着它正在使用 1 单击延迟。我尝试与console.log 核对,我在第一次点击和第二次点击时都得到了完美的数据。那么这段代码中限制它第一次添加数据的问题是什么? (我不知道问题的标题-_-所以如果有人可以纠正,请做)

$(document).ready(function() 
$("#submit").click(function(e)
    e.preventDefault();
    var post = $("#s-content").val();
    post = $.trim(post);
    if (post=="")
    
        $("#status-warning").show(100);setTimeout(function()$("#status-warning").hide(100),3000);
    
    else
    
        $.ajax(
            type:"POST",
            url:"process/post.php",
            data:$("#post").serialize(),
            cache:false,
            success: function(data)
                var request = $.ajax(
                        type:"GET",
                    url:"process/getNewPost.php?id=<?php echo $_SESSION['id']."&token=".session_id(); ?>",
                    /*success:function(data)
                        $("#all-posts").prepend(data);
                        console.log(data);
                        */
                    );
                    request.done(function(check)
                        console.log(check);
                        $("#all-posts").prepend(check);
                    );

                /*var a=''; 
                a += '<div><li style="white-space:pre;">';
                a += $("#s-content").val();
                a += '</li></div>';
                $("#all-posts").prepend(check);*/
                $("#s-content").val("");
                $("#remove").remove();
        );
    
);
);

【问题讨论】:

【参考方案1】:

我不确定这是否是您的问题的原因,但您的解决方案是不必要的复杂。

    您不需要发出 2 个 ajax 请求。您已经拥有 javascript 中可用的变量,因此您可以使用这些变量来修改您的第一个 ajax 调用的 success 函数中的 #all-posts 部分。即使您没有所有可用的东西,您也应该让 process/post.php 返回它,而不是向服务器发出新请求。 您不需要将会话变量添加到您的 url。只需在 php 中启动会话,您就可以使用它们。虽然这可能不再重要,因为第二个 ajax 调用是不必要的。

【讨论】:

2.该会话变量和 id 仅用于“显示”。 (操纵xD):P:D和1。我想从另一个不同的php文件中获取数据。那么我怎样才能在单个 ajax 请求中完成所有进程呢?以及我使用另一个 php 文件的原因 - 当User A 发布他的帖子同时User B 也发布了一些内容时,我需要显示这两个帖子。所以我无法从process/post.php 获取数据,因为它只会显示单个帖子,我需要获取所有新数据,这就是我使用另一个 php 文件的原因。 @user3314428 只需在process/post.php 的末尾加上process/getNewPost.php。如果您在上次更新的会话中存储时间戳,则您只能获取在该时间戳之后添加的记录,而不管是谁发布的。 嗯好主意.. 是的,我将时间戳存储在会话变量中。我会尽力让你知道。你确定这能解决我的主要问题吗?

以上是关于php - ajax 问题 - 数据预置/附加中的一键延迟的主要内容,如果未能解决你的问题,请参考以下文章

附加选项后选择问题

使用 Jquery 在单击按钮时将 PHP 文件中的 HTML 加载/预置到 div 中

使用 AJAX 和 PHP 将 <options> 附加到 <select>

Ajax - 通过 ajax 将输入文件和附加变量发送到 php 文件

如何正确编码 PHP 中的 JavaScript 以附加到页面?

使用 ajax 将数据附加到现有数据表中的正确方法