【问题标题】:AJAX returning null XMLAJAX 返回空 XML
【发布时间】:2012-03-01 23:21:13
【问题描述】:

我是第一次尝试使用 AJAX,但我很难掌握它的窍门。这是请求代码:

function requestData(j) {
    var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp=new XMLHttpRequest();
        }
        xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                    xml = xmlhttp.responseXML;
                    post = "";
                    title = "";
                    postdata = xml.getElementsByTagName("post");
                    titledata = xml.getElementsByTagName("title");
                    datedata = xml.getElementsByTagName("date");
                    timedata = xml.getElementsByTagName("time");
                    document.getElementById("post").value = postdata[0].childNodes[0].nodeValue;
                    document.getElementById("heading").value = titledata[0].childNodes[0].nodeValue;
                    document.getElementById("date").value = datedata[0].childNodes[0].nodeValue;
                    document.getElementById("time").value = timedata[0].childNodes[0].nodeValue;
                    document.getElementById("id").value = j;
                    document.getElementById("update").value = "true";
                }
            };
        xmlhttp.open("POST","../script/getnewsdata.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send("ID=" + j);
        return false;
    }

Firebug 在 postdata = xml.getElementsByTagName("post"); 行告诉我“xml 为空”。这意味着 xmlhttp.responseXML 为空。

这是服务器端脚本:

<?php
$db = mysql_connect("wadafw","awfawf","awfsgv");
if(!$db)
{
  die("Could not connect: " . mysql_error());
}
mysql_select_db("afggbare", $db);
$updata = mysql_query('SELECT * FROM News WHERE NewsID='.$_POST['ID']);
$blog = mysql_fetch_array($updata);
$post = $blog['Content'];
$regex = Array('/<br />/', '/<(\/?)(b|i|u)>/', '/<a href="(http://[www.]?\w+)">(\w+)<\/a>/', '/<div class="media"><iframe title="YouTube video player" width="425" height="265" src="http://www.youtube.com/embed/(\w+)hd=1" frameborder="0" allowfullscreen></iframe></div>/', '/<div class="media"><img width="425" src="(http://[www.]?[\w+])" /></div>/');
$regReplace = Array('\r\n', '[$1$2]', '[link=$1]$2[/link]', '[youtube]http://www.youtube.com/watch?v=$1[/youtube]',
                '[img]$1[/img]');
$post = preg_replace($regex, $regReplace, $post);

echo    '<newsItem>
        <title>'.$blog['Heading'].'</title>
        <post>'.$post.'</post>
        <date>'.$blog['time'].'</date>
        <time>'.$blog['time'].'</time>
    </newsItem>';
?>

正则表达式可能很糟糕......但现在这并不重要。

改成这个...现在出现“函数未定义”错误:

function requestData(j) {
        $.ajax("../script/getnewsdata.php", {
            data: {ID: j},
            type: "POST",
            dataType: "xml",
            success: function(data, status, jqXHR){
                var xml = jqXHR.responseXML;
                postdata = xml.getElementsByTagName("post");
                titledata = xml.getElementsByTagName("title");
                datedata = xml.getElementsByTagName("date");
                timedata = xml.getElementsByTagName("time");
                document.getElementById("post").value = postdata[0].childNodes[0].nodeValue;
                document.getElementById("heading").value = titledata[0].childNodes[0].nodeValue;
                document.getElementById("date").value = datedata[0].childNodes[0].nodeValue;
                document.getElementById("time").value = timedata[0].childNodes[0].nodeValue;
                document.getElementById("id").value = j;
                document.getElementById("update").value = "true";
            }


        }
    }

好的,发现问题了。这只是一个错字......没有关闭 $.ajax() 参数括号。现在我没有收到错误。但它只是没有做任何事情......

【问题讨论】:

  • &lt;?xml version="1.0"?&gt;在哪里?
  • 对不起,我忘记了。它现在在,但我遇到了同样的问题。

标签: php javascript xml ajax


【解决方案1】:

我建议使用现有库,而不是尝试从头开始运行 AJAX。 jQuery 让这个任务变得非常简单。

http://api.jquery.com/jQuery.ajax/

function requestData(j) {
    $.ajax('../script/getnewsdata.php', {
        data: {ID: j},
        type: 'POST',
        dataType: 'xml',
        success: function(data, status, jqXHR){
            // consume data here
        }
    });
}

【讨论】:

  • 他需要为此使用插件。
  • jQuery 可能会让事情变得更容易,但它需要我先学习 jQuery……而我没有时间。
  • 我会推荐这种方法。 XHR 对象太不一致,无法从头开始使用,只需使用外部库即可。
  • 卢克,你不必学习 jQuery,你只需要学习 javascript :)
  • 你能给我一些关于从哪里开始 jQuery 实现的想法吗?我现在正在查看文档,但不太容易理解。
【解决方案2】:

它需要看起来像这样:

var xmlhttp;
if (window.XMLHttpRequest)
    xmlhttp=new XMLHttpRequest();
else
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
       document.getElementById("my").innerHTML=xmlhttp.responseText;
 }
 xmlhttp.open("POST","page.php,true);
 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xmlhttp.send("firstname=lolo&lastname=koko");

【讨论】:

  • 我很困惑。我正在使用 xmhttp 发送请求,然后在 XMLHttpRequest 触发 onreadystatechange 事件时将 xml 定义为 xmlhttp.responseXML... 或者,至少我认为是这样。
  • 这基本上就是我使用的确切代码......我想我们是从同一个地方得到的...... w3schools.com。谢谢,但我要使用 jQuery。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2018-06-08
相关资源
最近更新 更多