繁体   English   中英

AJAX将PHP数据返回到页面

[英]AJAX return PHP data to page

编辑

根据一些研究,我改变了方法,但得到了部分结果。

数据库:

+--------------------------------------------------+
|  id  |  date      |  objet  |  contenu     | lu  |
+--------------------------------------------------+
|  1   | 2013-01-20 | msg1    | msg1_content | 0   |
|  2   | 2013-01-20 | msg2    | msg2_content | 0   |
|  3   | 2013-01-20 | msg3    | msg3_content | 0   |
+--------------------------------------------------+

链接:

<a href="javascript:void(0);" onclick="markAsRead('.$message['id'].');">View'</a>

JS / AJAX:

function markAsRead(id)
{
    $.ajax(
    {
        type: "GET",
        url: 'php/messagerie.php',
        data: "id=" + id, // appears as $_GET['id'] @ ur backend side
        success: function(data)
        {
            // data is ur summary
            $('#contenu').html(data);
        }
    });
}

PHP(php / messagerie.php)

$q = intval($_GET['id']);

// connect to db (of course not shown here)
if (!$con)
{
    die('Could not connect: ' . mysqli_error($con));
}

$sql="SELECT * FROM coq_messagerie WHERE id = '".$q."'";

$lu = mysqli_query($mysqli, "UPDATE ".DB_PREFIX."messagerie SET lu='1' WHERE id='$q' LIMIT 1");
$result = mysqli_query($con,$sql);

    echo "<table border='1' width='100%'>
        <tr>
            <th>id</th>
            <th>date</th>
            <th>objet</th>
            <th>contenu</th>
            <th>lu</th>
        </tr>";

        while($row = mysqli_fetch_array($result))
        {
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['date'] . "</td>";
                echo "<td>" . $row['objet'] . "</td>";
                echo "<td>" . $row['contenu'] . "</td>";
                echo "<td>" . $row['lu'] . "</td>";
            echo "</tr>";
        }

    echo "</table>";

mysqli_close($con);

当我查找id 2或3时,我目前仅检索<th>而不是信息,但是正在获取id 1的信息。这怎么只能部分工作?


介绍

为了在页面上显示动态信息,我使用了一些代码片段,这些代码应该从基本HTML链接收集数据,该HTML链接分析并返回当前页面上的数据。 当然,这似乎非常基础,但是作为我的第一个AJAX脚本,我将不胜感激。

HTML链接:

$output .= '<a onclick="markAsRead('.$message['id'].'); return false;">'.View.'</a>';

注意:该链接按预期收集id字段。

JS / AJAX代码:

function markAsRead(str) {
    console.log("starting");
    if (str=="")
    {
        console.log("string empty");
        document.getElementById("contenu").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        console.log("on ready state change");
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("contenu").innerHTML=xmlhttp.responseText;
        }
        else
        {
            console.log("seems to returning information");
            var abc = "<h1>Huh.</h1>";
            document.getElementById("contenu").innerHTML=abc;
        }
    }
    xmlhttp.open("GET","php/messagerie.php?q="+str);
    xmlhttp.send();
}

注意: console.log('###_'+str)用于查看代码崩溃的位置。 所有记录均正确(105、107、109)。

PHP( php / read.php

// connect to db (of course not shown here)
$message = $GET["messageid"];

$lu = mysqli_query($mysqli, "UPDATE messages SET lu='1' WHERE id='$message' LIMIT 1");
if(!$lu)
{
    echo "Update error"; 
    exit;
}
else
{    
    $data = mysqli_query($mysqli, "SELECT * FROM messages WHERE id='$message' LIMIT 1");
    while($row = mysqli_fetch_array($data))
    {
        echo $row["contenu"];
    }
}

注意: $lu已更新,这使我相信问题是在while/echo区域还是在我的AJAX返回中。

当前控制台日志

starting
on ready state change
seems to returning information
-> GET ***/php/messagerie.php?q=3
   ** params -> q 3 **
   ** empty response **
   ** empty HTML **
on ready state change
seems to returning information
on ready state change

我要去哪里错了?

$message = $GET["messageid"];

应该

$message = $_GET["messageid"];

找到解决方案! 这将更新字段值以将邮件标记为已读,并在适当的div中显示该邮件。

在AJAX请求中,缺少的参数true随查询一起添加。

完整的代码

AJAX

function markAsRead(str)
{    
    if (str=="")
    {
        document.getElementById("contenu").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("contenu").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","php/messagerie.php?q="+str,true);  // added ",true"
    xmlhttp.send();
}

PHP

$q = intval($_GET['q']);

$con = mysqli_connect('','','',''); // values hidden here for obvious reasons
mysql_set_charset('utf8',$con);

if (!$con)
{
    die('Could not connect: ' . mysqli_error($con));
}

$sql="SELECT * FROM messages WHERE id = '".$q."'";
$result = mysqli_query($con,$sql);

$update = mysqli_query($con, "UPDATE messages SET lu='1' WHERE id='$q'");

if(mysqli_num_rows($result) > 0)
{
    echo "<table border='1'>
            <tr>
                <th>id</th>
                <th>date</th>
                <th>objet</th>
                <th>contenu</th>
                <th>lu</th>
            </tr>";

    while($row = mysqli_fetch_array($result))
    {
        echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['date'] . "</td>";
            echo "<td>" . $row['objet'] . "</td>";
            echo "<td>" . $row['contenu'] . "</td>";
            echo "<td>" . $row['lu'] . "</td>";
        echo "</tr>";
    }

    echo "</table>";
}

mysqli_close($con);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM