编辑: 我已经把一切都改成了mysqli。我有另一个脚本在mysqli中正确地完成了所有操作,但在我的仓促中,我复制了其他人的一部分而没有注意到它是在mysql中完成的。看起来这样可以解决这个问题,谢谢大家!我已经编辑了下面的代码,以便它可以作为任何正在解决类似问题的人的资源。
我在使用ajax在godaddy共享主机帐户上工作时遇到了一些麻烦。我之前在另一个服务器上使用它没有任何麻烦,所以我认为godaddy服务器有些奇怪,尽管我很高兴不正确。我尝试先在perl中编写这段代码,但结果是godaddy不支持JSON.pm,所以我切换到php,因为这似乎是godaddy的首选语言。我仍然在ajax调用中抛出一个错误。
这是每个部分的玩具版本。与HTML相关的唯一部分是调用overlay.js和test id secton以显示jQuery正在运行。
下面的HTML调用overlay.js:
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Carl Thomas Edwards</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="css/style.css" />
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<script language="javascript" type="text/javascript" src="js/overlay.js"></script>
</head>
<body id="main">
<p>
<span id="test">0</span> match(es) found.
</p>
</body>
</html>
我知道jQuery部分正在运行,因为我已经使用jQuery DOM选择进行测试并且它可以工作(测试ID会按预期进行修改)。基本上所有这一切都应该发生,如果一切正常,就是一个警告“FUNCTIONAL”。但是,我总是收到一条错误消息:
Failed to perform AJAX call! textStatus: (parsererror) and errorThrown: (SyntaxError: Unexpected token <)
我认为这个错误与godaddy用json做一些奇怪的事情有关,但我可能错了。当我注释掉dataType:'json'行时,警报会说功能正常。我不确定“&lt;”在哪里如果这实际上是问题会来吗?
overlay.js中
$(function() {
$('#test').text( "text yes?" );
$.ajax({
url: 'overlay.php',
data: "",
dataType: 'json',
success: function(data, textStatus, jqXHR) {
alert("FUNCTIONAL");
},
error: function(jqXHR, textStatus, errorThrown){
alert("Failed to perform AJAX call! textStatus: (" + textStatus +
") and errorThrown: (" + errorThrown + ")");
}
});
});
根据Chrome开发者工具,ajax调用运行overlay.php没有任何错误。我知道我已经在其他地方测试了数据库连接。我知道我的查询工作正常,因为它已在SSH服务器上进行了测试。我不认为这个文件中可能有任何错误,但我再次接受建议,因为这让我感到疯狂。
overlay.php
$mysqli = mysqli_connect($hostname, $username, $password, $database);
if(mysqli_connect_errno($mysqli)) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$qry = "
SELECT paint_id, paint_name, paint_date, paint_media, paint_dim, paint_file
FROM paintings
WHERE paint_id = '1'
";
$results = mysqli_query($mysqli, $qry);
$row = mysqli_fetch_assoc($results);
echo json_encode($row);
?>
完整代码的网址为:http://www.carlthomasedwards.com/painting2.php
我在godaddy的php.ini文件中启用了json。我也联系了他们寻求支持,这家伙完全无能为力。还有其他一些特殊的东西需要做才能让ajax调用在godaddy上工作吗?为什么错误说“&lt;”符号出现在json?任何帮助表示赞赏!
答案 0 :(得分:1)
在PHP脚本中,您将数据库连接作为mysqli
资源打开,但尝试将其作为mysql
资源进行查询。你不能混合这两组电话。使用mysqli
并删除mysql
,因为后者已被弃用。
以这种方式混合调用可能会导致以后的mysql
代码失败并提供您未检查或处理的错误消息。
如果正在返回错误消息而不是预期的JSON结果,那么您将从您正在看到的Javascript中获得完全相同的错误消息。
[edit]
我看了一下你的网站。这是你的ajax调用返回的内容:
<br />
<b>Warning</b>: mysql_query() [<a href='function.mysql-query'>function.mysql-query</a>]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in <b>/home/content/78/11658278/html/overlay.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>: mysql_query() [<a href='function.mysql-query'>function.mysql-query</a>]: A link to the server could not be established in <b>/home/content/78/11658278/html/overlay.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>: mysql_fetch_row() expects parameter 1 to be resource, boolean given in <b>/home/content/78/11658278/html/overlay.php</b> on line <b>30</b><br />
null