【问题标题】:error reading the response :Invalid XML error读取响应时出错:无效的 XML 错误
【发布时间】:2015-08-12 16:40:15
【问题描述】:

我正在使用 ajax 和 php&mysql 检查用户名是否存在于数据库中。浏览器在弹出窗口中抛出以下错误:

读取响应时出错:无效的 XML

我的HanleServerResponse() 功能:

function handleServerResponse() {
    // retrieve the server's response packaged as an XML DOM object
    var xmlResponse = xmlHttp.responseXML;

    // catching potential errors with IE and Opera
    if (!xmlResponse || !xmlResponse.documentElement)
        throw("Invalid XML structure:\n" + xmlHttp.responseText);

    // catching potential errors with Firefox
    var rootNodeName = xmlResponse.documentElement.nodeName;
    if (rootNodeName == "parsererror")
        throw("Invalid XML structure:\n" + xmlHttp.responseText);

    // getting the root element (the document element)
    xmlRoot = xmlResponse.documentElement;

    // testing that we received the XML document we expect
    if (rootNodeName != "response" || !xmlRoot.firstChild)
        throw("Invalid XML structure:\n" + xmlHttp.responseText);

    // the value we need to display is the child of the root <response> element
    responseText = xmlRoot.firstChild.data;

    // display the user message
    myDiv = document.getElementById("myDivElement");
    myDiv.innerHTML = "Server says the answer is: " + responseText;
}

我的 ajax.php 文件:

<?php
    header('Content-Type: text/xml');
    include ("./inc/connect.inc.php");

    $username = $_GET['username'];
    $query = mysql_query("SELECT fname FROM users WHERE fname='$username';");
    while($row = mysql_fetch_assoc($query)) {
        $name = $row['fname'];
        if ($name == $username) {   
            $dom = new DOMDocument();
            $response = $dom->createElement('response');
            $dom->appendChild($response);
            $text = $dom->createTextNode('username exits');
            $response->appendChild($text);
            $xml_string=$dom->saveXML();
            echo $xml_string;
        } else {
            $dom = new DOMDocument();
            $response = $dom->createElement('response');
            $dom->appendChild($response);
            $text = $dom->createTextNode('username available');
            $response->appendChild($text);
            $xml_string=$dom->saveXML();
            echo $xml_string;
        }
    }
?>

【问题讨论】:

  • ajax请求的响应是什么?您也可以使用此代码进行 SQL 注入;不要将用户输入直接传递给您的查询。
  • 你是对的,我没有使用 mysql_escape_string,因为我只是在测试 ajax。如果能解决上面的错误就更好了。
  • 你忽略了我评论的第一部分? ajax请求的响应是什么?
  • 如果数据库中已经存在用户名,则响应为“用户名退出”,否则为“可用”
  • 您是否在开发者控制台中查看请求? commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art034

标签: javascript php ajax xml ajaxform


【解决方案1】:

这不是答案,但可能会给其他人提供解决问题的线索。

OP 发布的代码 sn-ps 似乎按预期工作。 PHP 生成一个 xml 响应,而 Javascript 能够提取该值。复制报告的错误的唯一方法是修改 xml,例如添加前导空格。 OP 可能会尝试添加“ob_end_clean();”声明 PHP 部分以清除任何无关输出的响应缓冲区(最佳猜测)。并且查看完整的 XMLHttpRequest 将有助于排除故障。

OP 的代码测试数据库中的名称并返回以下响应之一:

匹配:

<?xml version="1.0"?>
<response>username exits</response>

不匹配:

<?xml version="1.0"?>
<response>username available</response>

通过将它们提供给 DOMParse 以生成 xml 文档来测试两个响应:

  var parser = new DOMParser();
  var xmlResponse = parser.parseFromString( strXml,"text/xml");

没有观察到错误。接下来,xml 被馈送到 OP 的函数 handleServerResponse()。它在两种情况下都返回了正确的值。

【讨论】:

  • 也许使用 ob_end_clean(); 会有一些好处,因为大多数书都使用了它。
猜你喜欢
  • 2011-10-17
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多