-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

ajax 呼び出しが要求しているデータ型を指定する必要があります。指定しないと、jQuery は MIME タイプに基づいて「インテリジェントに」検出します。ajax 呼び出しが json データを受信すると、それを JavaScript オブジェクトとして使用するため、そのアラートが表示されます。

于 2013-06-09T23:42:48.907 に答える
1

.ajax() 呼び出しは、dataType パラメーターが指定されていない場合、要求されたページが返すものを「インテリジェントに推測」します。
JSON の場合、JavaScript オブジェクトを success 関数に渡します。

あなたの質問を確認した後、私はあなたが言いたいことを理解していると信じています. あなたが期待しているのは、name、clubID、lID、sName、description の 5 つのプロパティを持つ単一のオブジェクト (非常に安全でない方法で言及されているように SQL で検索) です。ただし、返されているのは、プロパティが 2 つしかない複数の行であるように見えますか?
あなたが言っているのは、phpスクリプトが正しい値(1行)をエコーし​​ている間、JSONは複数の値(/行)を受け取っているということです。
PHP が AJAX 呼び出しから正しい ID を受け取っていますか?

于 2013-06-09T23:45:16.270 に答える
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

そうです。

JSON はオブジェクトです。別名Javascript Object Notation。その場合に備えてください。それにはあなたのデータが含まれているはずです。試してみてくださいdata.*

ところで、SQL クエリで使用する前にユーザーからのデータを消去しないと、問題が発生します。

基本的な例で実際に見てみましょう:

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

あなたのクエリは今

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

1 は常に true であるため、これですべてのクラブメンバー テーブルを取得できます。乾杯。

于 2013-06-09T23:47:14.083 に答える
1

parseJSONオブジェクトを返す場合でも、console.log を実行する[Object, Object, ...]と、どれがオブジェクトの配列であるかが表示されるはずです

于 2013-06-09T23:48:15.263 に答える