-1

我正在尝试从数据库返回数据并将其转换为 json 并将其发送回我的 javascript。但是它没有按计划工作,它作为 javascript 上的数组返回。

Javascript

function getData(id) {
    $.ajax({
        url: 'some url',
        crossDomain: true,
        type: 'post',
        data: {
            id: id
        },
        success: function (data) {
            var json = jQuery.parseJSON(data);
            alert(data);
        },
    });
};

PHP

<?php
header("access-control-allow-origin: *");

$dbhost = 'you dont need this info';
$dbuser = 'you dont need this info';
$dbpass = 'you dont need this info';
$db     = 'you dont need this info';

$dbserver = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db) or die("Unable to select database: " . mysql_error());

if (isset($_POST['id'])) {
    $ID = $_POST['id'];
}
echo $ID;

$result = mysql_query('SELECT * FROM clubmember WHERE clubID = "' . $ID . '"');
$row    = mysql_fetch_assoc($result);
$name   = $row['name'];
$clubID = $row['clubID'];
$lID    = $row['lID'];
$sName  = $row['sName'];
$desc   = $row['description'];


$json = json_encode(array(
    'name' => $name,
    'clubID' => $clubID,
    'lID' => $lID,
    'sName' => $sName,
    'description' => $desc
));

echo $json;

?>

以 ...形式发出的 javascript 警报[object Object], [object Object]不应该是这种情况...

4

7 回答 7

1

不要在你的 PHP 中回显 $ID。使用 jQuery 的 ajax dataType 属性并将其设置为 json。使用默认的 javascript json 解析器。

于 2013-06-09T23:33:19.300 回答
1

尝试警报json而不是data

于 2013-06-09T23:34:01.443 回答
1

Javascript 返回一个对象,因为您实际上是在警告一个对象。尝试alert(data.name);

或者alert(data.clubID);,它会起作用。

于 2013-06-09T23:34:27.517 回答
1

您应该指定 ajax 调用请求的数据类型,否则 jQuery 将根据 MIME 类型“智能”检测。如果 ajax 调用接收到 json 数据,它会将其用作 JavaScript 对象,这就是您收到该警报的原因。

于 2013-06-09T23:42:48.907 回答
1

如果未给出 dataType 参数,.ajax() 调用将“智能猜测”请求的页面返回什么。
在 JSON 的情况下,它将一个 JavaScript 对象传递给成功函数。

在查看您的问题后,我相信我明白您的意思。您所期望的是一个具有 5 个属性、名称、俱乐部 ID、lID、sName 和描述的对象(使用 SQL 查找,如以非常不安全的方式提到的)。但是,您返回的似乎是只有两个属性的多行?
您的意思是,虽然 php 脚本回显是正确的值(一行),但 JSON 正在接收多个值(/行)。
您确定 PHP 从 AJAX 调用中接收到正确的 ID 吗?

于 2013-06-09T23:45:16.270 回答
1

没错。

JSON 是一个对象。又名Javascript 对象表示法。应该以防万一。它应该包含您的数据。试试data.*

顺便说一句,如果您在使用任何 SQL 查询之前不清除来自用户的数据,那将造成麻烦。

通过一个基本示例查看它的实际效果:

// $_POST['id'] = '" OR 1"'
$result = mysql_query('SELECT * FROM clubmember WHERE clubID = "'.$ID.'"');

您的查询现在是

SELECT * FROM clubmember WHERE clubID ="" OR 1 ""

因为 1 总是正确的,所以我现在可以占据你所有的俱乐部成员表。干杯。

于 2013-06-09T23:47:14.083 回答
1

即使parseJSON返回一个对象,执行 console.log 也应该显示[Object, Object, ...]哪个是对象数组

于 2013-06-09T23:48:15.263 回答