0

我对 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 获取 get 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 responseText并且Ajax 调用不从 php 文件返回数据

4

4 回答 4

2

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

GET 请求与您在访问给定 URL 时通常执行的任何其他浏览器请求一样。http://url/to/bridge.php?pro=<someValue>因此,您可以通过使用您选择的浏览器访问来测试 bridge.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 ...
于 2012-05-09T05:39:23.547 回答
0

为此使用 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>
于 2012-05-09T05:38:04.517 回答
0

首先只是从bridge.php 中回显0 或1 或任何该死的关键字'Hello world'。

编码

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

说如果一切顺利。IE 如果是 bridge.php 的路径,那么它将进入这个 if 条件。并会报警响应。

如果这可以完美运行,那么您的代码也可以正常工作。

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

另外使用Mozilla firebug之类的工具。这样您就可以了解正在发生的事情。希望这可以帮助。

于 2012-05-09T05:45:34.540 回答
-1

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

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

可能有效的是:

xmlhttp.open("GET","http://yourhost.com/bridge.php?pro="+namex,true);
于 2012-05-09T05:34:50.783 回答