mysql查询不能与ajax中的跨域一起使用

时间:2016-06-17 14:53:31

标签: javascript php mysql ajax cross-domain

我的问题是以下...... 我制作了一些从mysql数据库中读取记录的php代码:

$host = $_SESSION['host'];
$username = $_SESSION['username'];
$password = $_SESSION['password'];
$db = $_SESSION['db'];

$con = mysqli_connect($host,$username,$password,$db);

$sql = "SELECT * FROM `table`";
$result = $con->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
         ...
    }
}

我的HTML:

<button onclick="list">submit</button>
<div id="output"></div>

<script>
var thisHost = "host.php";
function list() {
    $.ajax({
        type: 'POST',
        url: thisHost,
        data: "list=true",
        success: function(data) 
        {
            $("#output").html(data);
        },
        error: function (responseData, textStatus, errorThrown) 
        {
            console.warn(responseData, textStatus, errorThrown);
        }
    });
}
</script>

就一切正常而言。但是现在我想从另一台主机调用php代码。因此,html文件位于另一台主机上(localhost:81),而php文件保留在旧主机上(localhost:80)。

现在我注意到我需要一些东西来跨域,因为ajax似乎不适用于其他主机。所以我所做的就是在开头就将这些行添加到php代码中:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');

并将javascript中thisHost var的值更改为

"http://localhost:80/host.php"

之后ajax部分再次工作和php响应。但是,每次我想通过这样的事情进行查询:

$sql = "SELECT * FROM `table`";

我会收到此错误:

  

致命错误:未捕获错误:在null上调用成员函数query()   在C:\ path \ to \ host.php:71堆栈跟踪:#0 {main}引入   第71行的C:\ path \ to \ host.php

我很确定查询是正确的。那么我需要改变什么?

1 个答案:

答案 0 :(得分:0)

在无效句柄上调用方法会产生这样的错误。始终检查您的连接请求是否成功并处理可能发生的任何错误。

启用mysqli例外会使这些事情变得更加难以忽视。