首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确加载一个又一个ajax请求

如何正确加载一个又一个ajax请求
EN

Stack Overflow用户
提问于 2014-03-14 15:16:22
回答 2查看 1.1K关注 0票数 1

我正在为我正在制作的网站创建一个消息传递系统。基本上,它包括单击一个按钮和两个Ajax请求。我甚至不确定我是否会以正确的方式去做这件事。单击按钮后,第一个Ajax开始调用。第一个ajax请求加载一个文件,该文件加载消息的样式并从数据库中检索它们。我遇到的问题是,第一个请求有时需要很长时间才能完成,而另一个请求没有完成。我的另一个问题是,如果我把一个“动画延迟”类型的东西,然后它将看起来像它运行缓慢的页面。您可以在"http://www.linkmesocial.com/linkme.php?activeTab=mes“上运行一个示例,您必须键入或复制并超过整个长度才能工作,否则您将重定向到登录页面。任何建议都会很棒!如果有一些更简单的方式来建立一个消息系统,请随时给我一些建议或指导我的教程。非常感谢!

我也想知道这是否是一个好做法。(请:)

我的原始档案。在单击"mes_tab“类时,将提交一份表单。函数mes_main()也被调用。

代码语言:javascript
运行
复制
session_start();
$username = $_SESSION['user'];
$messages = mysqli_query($con, "SELECT * FROM messages WHERE recipient='$username'");
echo "<div id=\"mes_main-bar_top\" class=\"center\">Messages</div>";
echo "<div id=\"mes_main\">";
echo "<table id=\"mes_main-allView\" class=\"left\">";
echo "<td class=\"mes_tab-change\" >^</td>";
$from=array("","","", "", "", "", "", "");

for ($msgCount = 0; $msgCount < 8; $msgCount++){
    $row = mysqli_fetch_array($messages);
    $from[$msgCount] = $row['sender'];
    for ($prev = 0; $prev < $msgCount; $prev++)
    {
        if ($from[$msgCount] == $from[$prev] )
        {
                $cont = true;
                break;

        }
    }
    if ($cont)
    {
    $cont = false;
    continue;
    }
    if ($row['message'] == ""){
        break;  
    }

    echo "<tr><td class=\"mes_tab\" onclick=\"mes_main('" . $row['sender'] .  "')\">";
    echo "<h3 class=\"center\">" . $row['sender'] .  "</h3>";
    echo "<form id=\"" . $row['sender'] .  "\" >";
    echo "<input name=\"sender\" value=\"" . $row['sender'] . "\" hidden/>";
    echo "<input name=\"id\" value=\"" . $row['id'] . "\" hidden/>";
    echo "</form>";
    echo "</td></tr>";

}


if ($msgCount == 8)
{
echo "<td id=\"mes_tab-change_bottom\" class=\"mes_tab-change\">V</td>";
}
echo "</table>  <!-- end mes_main-allView -->";

echo "<div id=\"mes_main-mesView\" class=\"right\">";

echo "</div>    <!-- end mes_main-mesView -->";

echo "</div>    <!-- end mes_main -->";

mes_main()函数。我在上面的文章中所指的是里面的两个ajax函数。

代码语言:javascript
运行
复制
function mes_main(x)
{
var sender = x;
$( sender ).submit(function( event ) {
  event.preventDefault();

});


ajax_req_mes("scripts/home/php/mes_load.php?" + sender , "mes_main-mesView");
ajax_req_mes("scripts/home/php/mes_content.php?" + sender ,"mes_content");



}

mes_load.php

$sender变量是通过通过URL传递发送者用户名来创建的。这就是为什么我在url上做php爆炸。

代码语言:javascript
运行
复制
session_start();
$username = $_SESSION['user'];
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$sender = explode('?', $url);
$recieved = mysqli_query($con, "SELECT * FROM messages WHERE recipient='$username' AND sender='$sender[1]'");
$sent = mysqli_query($con, "SELECT * FROM messages WHERE recipient='$sender[1]' AND sender='$username'");

echo "<div id=\"mes_content\"></div>";
echo "<div id=\"mes_field\" class=\"right\"></div>";

mes_content.php

代码语言:javascript
运行
复制
session_start();
$username = $_SESSION['user'];
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$sender = explode('?', $url);
$recieved = mysqli_query($con, "SELECT * FROM messages WHERE recipient='$username' AND sender='$sender[1]'");
$sent = mysqli_query($con, "SELECT * FROM messages WHERE recipient='$sender[1]' AND sender='$username'");


echo "<table id=\"mesView-table\">";

$REC = array();
$SENT = array();

$ID = array();



for ($i = 0; $i < 25; $i++)
{


$rec = mysqli_fetch_array($recieved);
$sent = mysqli_fetch_array($sent);


    if ($rec['id'] > 0)
    {
    $REC[$i] = $rec['id'];
    }


    if ($sent['id'] > 0)
    {
    $SENT[$i] = $sent['id'];
    }



}

$ID = array_merge($SENT, $REC);
sort($ID);

    for ($x = 0; $x < count($ID); $x++) 
    {
    $key = $ID[$x]; 
    $result = mysqli_query($con, "SELECT * FROM messages WHERE id = '$key'");
    $res = mysqli_fetch_array($result);
        if (in_array($key, $REC))
        {

            echo "<tr><td class='mes_recieved'>";
            echo $res['message'];           
            echo "</tr></td>";
        }
        elseif (in_array($key, $SENT))
        {
            echo "<tr><td class='mes_sent'>";
            echo $res['message'];       
            echo "</tr></td>";              
        }


    }

echo "</table>";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-14 15:40:01

在ajax请求中将异步设置为false!第二个请求将等待完成第一个请求,然后启动。此外,你也可以抓住成功和错误的目的。

票数 1
EN

Stack Overflow用户

发布于 2014-03-14 15:22:42

只需使用“成功”和“错误”回调。

此外,您还可以使用“已完成”回调

但是,国际海事组织,对于这种问题,我认为一个更好的选择是使用Websockets

编辑:下面是一些如何做到这一点的例子:

代码语言:javascript
运行
复制
jQuery.ajax({
        type : "POST",
        data : {msg:"your message"}
        url : "http://fu.com/myfile.php",
        success: function(response){
            //Do something with your response
        }
}).done(secondCall());

function secondCall(){
    jQuery.ajax({
        type : "POST",
        data : {data:"data"}
        url : "http://fu.com/myfile.php",
        success: function(response){
            //Do something with your response
        }
    });
}

EDIT2:对于可见性,下面是使用websockets:http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket的教程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22409003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档