返回JSON无法正常工作

时间:2013-06-09 23:28:50

标签: php javascript mysql json

我正在尝试从数据库返回数据并将其转换为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;

?>

[object Object], [object Object]形式的javascript提醒... 不应该是这种情况......

7 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

尝试提醒json而不是data

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

如果没有给出dataType参数,则.ajax()调用将“智能地猜测”所请求页面返回的内容。
对于JSON,它会将JavaScript对象传递给success函数。

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

答案 5 :(得分:1)

这是对的。

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

顺便说一下,如果在将用户与任何SQL查询一起使用之前没有清除来自用户的数据,那将会造成麻烦。

使用基本示例查看它的实际操作:

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

您的查询现在是

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

因为1总是如此,我现在能够拿走你所有的俱乐部会员桌。欢呼声。

答案 6 :(得分:1)

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