PHP无法将JSON数组传递给jQuery

时间:2012-08-02 23:12:51

标签: php mysql jquery

请原谅我,如果我在这里犯了一个愚蠢的错误...但我对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

3 个答案:

答案 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)
  }

我希望它会有所帮助;)