阿贾克斯会回报给我什么?(对 PHP 文件的 Ajax 调用)


What is ajax returning to me? (ajax call to php file)

我对ajax几乎是全新的。这是一个 ajax 调用,我使用它使用名为"bridge.php"的 php 文档从 sql 数据库中检索信息。我似乎无法理解我从中得到了什么,如果有的话。它是一个数组吗?一个对象?我没有得到任何东西,因为我在应该使用帖子时使用 get 吗?我试图返回的信息量不适合获取,但我通过电话发送的信息量足够小,无法容纳。

<script type="text/javascript">
    function refreshPro(namex){
        alert(namex);
        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("port_work").innerHTML=xmlhttp.responseText;   //what is xmlhttp.responseText?
            }
        }
        xmlhttp.open("GET","../bridge.php?pro="+namex,true);
        xmlhttp.send();
    }
</script>

现在对于 php(bridge.php(,它从 url 获取 var 并查询数据库,我知道这部分本身工作正常......

<?php
$pro = $_GET["pro"];
$sql = "SELECT * FROM portfolio WHERE title LIKE '"%$pro%'"";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
?>
    <div id="portfolio_item">
        <h2><?php echo $row['title']; ?></h2>
        <img src="<?php echo $row['image_paths']; ?>" alt="<?php echo $row['title']; ?>" />
        <p id="portfolio_desc"><?php echo $row['description']; ?></p>
    </div>
<?php
}
?>

是的,我已经做了功课。我研究了另外两篇文章,但一篇开始谈论我一无所知的 JSON,另一篇似乎不太符合我的问题,但我仍然发现答案有点有用。从单独的文件返回 AJAX 响应文本和 Ajax 调用不从 php 文件返回数据

您正在从服务器返回纯 HTML。responseText 变量是一个字符串,其中包含对 GET 请求的纯文本响应。

GET 请求与您在访问给定 URL 时通常执行的任何其他浏览器请求一样。因此,您可以通过使用您选择的浏览器访问http://url/to/bridge.php?pro=<someValue>来测试桥.php脚本为给定输入发送的内容。

得到的数据量并不重要,使用POST或GET的WRT是你想要输入多少数据(GET请求只能接受255个字符的数据,POST在技术上是无限的(。

如果直接访问 bridge.php 脚本时没有任何结果,则表示此脚本可能失败,导致 500 内部服务器错误代码。这不会被您的 javascript 代码捕获,因为您在对响应执行任何操作之前显式检查代码是否为 200(成功(。

我要补充一点:

    ... snip ...
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("port_work").innerHTML=xmlhttp.responseText;   
        }
        else 
        {
           alert('There was a ' + xmlhttp.status + ' error :(');
        }
    }
    ... snip ...

使用 jQuery 使它变得相当简单:

<script type="text/javascript" src="path/to/jquery.js">
<script type="text/javascript">
function refreshPro(namex)
{
    $.ajax({
      type: "GET",
      url: "../bridge.php",
      data: {
        pro: namex
      }
    }).done(function( msg )
    {
      $("#port_work").html(msg);
    });
}
</script>

首先,只需回显 0 或 1 或任何来自 bridge.php 的该死的关键字"Hello world"。

代码

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
 alert(xmlhttp.responseText);
 }

说如果一切顺利。即,如果通往桥梁的路径.php那么它将进入此 if 条件。并将提醒响应。

如果这工作正常,那么你的代码也应该可以工作。

另请参阅@ccKep提到的答案。它易于使用。

此外,还可以使用Mozilla萤火虫等工具。这样你就可以理解发生了什么。希望这有帮助。

Ajax 运行在客户端而不是服务器上,因此您需要提供服务器的 URL。 这是行不通的:

xmlhttp.open("GET","../bridge.php?pro="+namex,true);

可能有效的是:

xmlhttp.open("GET","http://yourhost.com/bridge.php?pro="+namex,true);