【问题标题】:mysql query doesn't work together with cross domain in ajaxmysql查询不能与ajax中的跨域一起使用
【发布时间】:2016-10-19 11:21:32
【问题描述】:

我的问题如下... 我做了一些从 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} 抛出 C:\path\to\host.php 在第 71 行

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

【问题讨论】:

  • 您在创建连接时没有检查错误,它是null。这里的 JavaScript 代码完全无关紧要。
  • 我明白了。问题的原因是我用来保持连接的会话。如果我有不同的主机,我没有检查会话是否不起作用:/ 谢谢!
  • 像这样在$_SESSION 中存储凭据是自找麻烦。希望有更好的方法。
  • @stackEr 正如 tadman 所说,您不希望在 $_SESSION 变量中添加信用。将它们放在公共无法访问的文件中,并在需要连接时参考它。如果你不能,我想知道你的网站什么时候上线,因为我需要练习我的黑客技术;)

标签: javascript php mysql ajax cross-domain


【解决方案1】:

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

开启mysqli 异常会让这些事情更难被忽略。

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多