请原谅我,如果我在这里犯了一个愚蠢的错误...但我对PHP不是新手...... 我已经坚持了很长时间。 我尝试了几种方法,但我只能传递ONe表行,而不能传递多行
我甚至尝试过以下方法,但是我遇到了同样的错误。 http://www.electrictoolbox.com/json-data-jquery-php-mysql/
以下是我要做的事情:
1)使用JQuery调用Ajax,从服务器获取数据。
$.ajax({
url: 'test.php', //the script to call to get data
data: "",
dataType: 'json', //data format
success: function(data) //on recieve of reply
{
//use "data"
}
2)使用PHP从MySql数据库中获取表数据。
$result = mysql_query("SELECT username,characterType FROM usertable");
3)将所有行作为JSON数据传递回调用函数。
//This works , Returns one row and I am able to get the result back at AJAX end
$array = mysql_fetch_row($result);
echo json_encode($array);
mysql_fetch_assoc($result)
失败,出现以下错误:
XML Parsing Error: no element found Location: moz-nullprincipal:{6b1***-****somecrap numbers****-***86} Line Number 17, Column 3:
$array = mysql_fetch_assoc($result);
echo json_encode($array);
我甚至尝试使用其他相关问题中建议的mysql_fetch_array($result, MYSQL_NUM)
,但我无法解决问题。
非常感谢任何帮助。
============
我可能错了,但只是想知道,如果这可能是否可能......这可能是本地设置相关的问题吗?配置错误..?
我使用“XAMPP安装”[Apache / MySQL / Tomcat ...捆绑在一个软件包中]完成了我的localhost设置... 当我将文件作为“PHP应用程序”运行时它运行得很好......我能够获得“所有行”但是当我在我的apache服务器上部署代码时它不会运行...整个php文件来自响应,“XML解析错误”[我正在使用firebug来跟踪响应]
由于 Pranav
答案 0 :(得分:0)
这里需要注意的一些事项:
正如Rup所说,$array = mysql_fetch_row($result);
只返回一行。
另一件事是test.php当前没有返回JSON对象;要查看最新情况,请注释掉dataType: 'json'
,并使用console.log(data);
查看返回的内容。你的回答可能看起来像这样:
["someUsername","someChartype"]
您期望的对象的格式可能更像是:
[{"username":"foo","chartype":"admin"},
{"username":"bar","chartype":"user"},
{"username":"fum","chartype":"guest"}]
要获取关联数组的格式,请改用mysql_fetch_assoc($result)
;这将给予
{"username":"someUsername","chracterType":"someChartype"}
总结一下,将您的PHP代码更新为:
在最后编码整个数组
$outputArray = array();
while( $row = mysql_fetch_assoc( $result ) ){
array_push($outputArray, $row);
}
echo json_encode($outputArray);
请查看How to build a JSON array from mysql database了解详情。另外,正如其中一个答案所提到的,值得使用PDO
而不是mysql_*
答案 1 :(得分:0)
不要像@Tuanderful指示的那样手动编写JSON字符串。让json_encode()
处理 - 只需给它正确的数据。尝试这样的事情:
$records = array();
while ( $record = mysql_fetch_assoc( $result ) ) {
$records[] = $record;
}
echo json_encode( $records );
答案 2 :(得分:0)
好吧,我想这样:
$.ajax({
url: 'test.php', //the script to call to get data
//data: "",
dataType: 'json', //data format
success: somevar
})
var somevar = function(data) //on recieve of reply
{
//use "data"
somevar2 = jQuery.parseJSON(data)
//now You can enter each row/cell from db(/php) like this
// somevar2[0] would be the first row from php
//if You want to do something with every line You can use:
//$.each(somevar2, function(key,value){
//$('#divname').html(value.cellnameoftable)
}
我希望它会有所帮助;)