【问题标题】:XML Parsing Error: no root element foundXML 解析错误:找不到根元素
【发布时间】:2017-09-22 00:07:31
【问题描述】:

我正在尝试搜索数据库中位于某个郊区的所有房产。我已经读到它与 HTML 代码 204 有关,但我仍然不明白该做什么或它的真正含义。我有一段时间没有做过任何 JS 或 PHP,所以这可能是一个非常愚蠢的错误,但我终其一生都无法弄清楚。请帮忙!

这是我的 JS 代码:

function basicSearch(){

    //Connect Script to the PHP
    var urlLink = "basicSearch.php";
    //Get search parameters:
    var searchAreaBar = document.getElementById("searchAreaBar").value;

    //define the parameters to send to php
    var strParameters = "searchAreaBar="+searchAreaBar + "&sid=" + Math.random();

        // define the options for the AJAX request
        var objOptions = {
        // use method post
        method: "post",
        // use strParameters as the parameters
        parameters: strParameters,
        // if successfil call fuction(objXHR)
        onSuccess: function(objXHR) {

            // if objXHR. responseText = yes
            if(objXHR.responseText=='Yes'){

                alert("Success!");

            }
            else{

                alert("Error! No Properties Found!");

            }
        }
    }

    // define the AJAX request object
    var objRequest = new Ajax.Request(urlLink,objOptions);

}

这是我的 PHP 代码:

<?php

    //Link the username and password:
    $connect = mysqli_connect("localhost", "admin", "12345", "realestate") or die ('Connection to database failed: ' . mysql_error());
    //Extract variables for request parameters:
    extract($_REQUEST);

    //Define the query:
    $BasicSearch = "SELECT * FROM properties WHERE Suberb='$searchAreaBar'";
    //Run the query:
    $resDasicSearch = mysqli_query($BasicSearch) or die(mysql_error());
    //SET intCount to number of rows in result:
    $intCount = mysqli_num_rows($resDasicSearch);

    //If intCount is greater than 0:
    if($intCount > 0){
        //Echo Yes:
        echo "Yes";
    }
    else{

        //Echo no:
        echo "No";

    }

?>

提前致谢。

【问题讨论】:

  • mysqli_query 需要两个参数 - 其中一个是 db 连接,另一个是 sql 语句
  • 我添加了 $connect 但我仍然遇到同样的错误。

标签: javascript php sql ajax database


【解决方案1】:

错误在于浏览器的编译器正在“注释掉”所有 php 并添加空 HTML 标记。然后它变得混乱,因为有一个“空”的文件。

这是因为网站(包括 JS、PHP 和 HTML 文件)是从本地目录存储和运行的。例如:

网址如下: file:///C:/xampp/htdocs/"项目名称"/Index.html

正确的网址是: localhost/“项目名称”

如果您使用的是 XAMPP,则需要将包含所有项目文件的文件夹放在 xampp 目录下的 htdocs 文件夹中。

【讨论】:

    【解决方案2】:

    由于您似乎在使用未显示的 Ajax 函数,因此很难确定问题的根本原因,因为据我所知,上述任何内容都不会产生您在标题中提到的错误发布 - 即“XML Parsing Error: no root element found” - 我想知道Ajax.Request中是否应该有一个配置选项需要设置来处理基本字符串响应?

    除此之外,您也许可以使用以下内容 - 甚至可能用于诊断目的。

    <?php
    
        /*
            ---------------
            basicSearch.php
            ---------------
        */
    
        $dbhost =   'localhost';
        $dbuser =   'admin'; 
        $dbpwd  =   '12345'; 
        $dbname =   'realestate';
    
        $db = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );
    
        $sql='select * from `properties` where `suberb`=?';
        $stmt=$db->prepare( $sql );
    
        if( $stmt ){
    
            $searcharea = $_POST['searchAreaBar'];
    
            $stmt->bind_param( 's', $searcharea );
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result( $suberbs );
            $stmt->fetch();
    
            echo $stmt->num_rows()==0 ? "No" : "Yes";
    
        }
        $stmt->close();
        $db->close();
    ?>
    
    <script>
        /* reuseable utility ajax function */
        function ajax( method, url, params, callback, options ){
            var xhr=new XMLHttpRequest();
            xhr.onreadystatechange=function(){
                if( xhr.readyState==4 && xhr.status==200 )callback.call( this, xhr.response, options, xhr.getAllResponseHeaders() );
            };
    
            var async=params.hasOwnProperty('async') ? params.async : true;
            var query=[];
    
            for( var n in params )query.push(n+'='+params[n]);
    
            switch( method.toLowerCase() ){
                case 'post': query=query.join('&'); break;
                case 'get': url+='?'+query.join('&'); params=null; break;
            }
    
            xhr.open( method.toUpperCase(), url, async );
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            xhr.send( params );
        }
    
    
        /* function that does the search */
        function function basicSearch(){
            /* configure the parameters to be used in the ajax request */
            var method='post';
            var url='basicSearch.php';
            var params={
                searchAreaBar:document.getElementById('searchAreaBar').value,
                sid:Math.random()
            };
            var callback=function(r,o,h){
                alert( r ? 'Success' : 'Error! No Properties Found!' )
            }
            var options={};
    
            /* call the ajax function */
            ajax.call(this,method, url, params, callback, options);
        }
    </script>
    

    【讨论】:

      【解决方案3】:

      今天我在 Firefox 的控制台中遇到了这个错误,很简单,虽然我的所有 API 返回 JSON,但我的一个 API 返回 text/html,它导致 Firefox 显示该错误!

      我已经更改了我的 NodeJS Express 代码:

      res.end('');
      

      res.json({});
      

      现在没事了!希望它可以帮助某人!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 2021-01-17
        • 2018-06-20
        • 2017-09-08
        相关资源
        最近更新 更多