2

私はajaxでそれに接続するphpファイルを持っています.phpからデータを取得するとコールバック値がJSONになり、アラートデータが表示されるとオブジェクトが表示されます

私の問題はどこですか?

PHP :

if(isset($_SERVER["HTTP_X_REQUESTED_WITH"])){

    $query = mysql_query("select * from tab");

    for ($i=0;$i<mysql_num_rows($query);$i++){

         while($row = mysql_fetch_assoc($query)){
             $title['t'][i] = $row['title'];
             $title['d'][i] = $row['description'];
         }
    }

echo(json_encode($title));
exit();

?>

JS :

$('#button').click(function(){
    $.ajax({
        url : "test2.php",
        data : $("#tab"),
        type : "GET",
        success : function(b){
                      b = eval('('+ b +')');    
                      console.log((b['t']));
                      alert(b);
                  }
    });
});

この JSON からすべてのデータを取得し、それを修正する方法を教えてください。

4

2 に答える 2

7

mysql_ 構文を使用せず、SQL インジェクションを防ぐために準備されたステートメントを使用しない、単一行フェッチと複数行フェッチを使用した完全な動作例を次に示します。

はい、ここで述べたように、mysql 固有の構文を使用しないでください。フォーム データをデータベースに入れることができません。私は何を間違っていますか?

function example()
{
    var select = true;
    var url = '../scripts/ajax.php';

    $.ajax(
    {
        // Post select to url.
        type : 'post',
        url : url,
        dataType : 'json', // expected returned data format.
        data : 
        {
                'select' : select // the variable you're posting.
        },
        success : function(data)
        {
            // This happens AFTER the PHP has returned an JSON array,
            // as explained below.
            var result1, result2, message;

            for(var i = 0; i < data.length; i++)
            {
                // Parse through the JSON array which was returned.
                // A proper error handling should be added here (check if
                // everything went successful or not)

                result1 = data[i].result1;
                result2 = data[i].result2;
                message = data[i].message;
                // Do something with result and result2, or message.
                // For example:
                $('#content').html(result1);

               // Or just alert / log the data.
               alert(result1);
            }
        },
        complete : function(data)
        {
            // do something, not critical.
        }
    });
}

ここで、投稿された変数を ajax.php で受け取る必要があります。

$select = isset($_POST['select']) ? $_POST['select'] : false;

三項演算子は、設定されていない場合、$select の値を false にします。

ここでデータベースにアクセスできることを確認してください。

$db = $GLOBALS['db']; // An example of a PDO database connection

ここで、$select が要求されている (true) かどうかを確認してから、いくつかのデータベース要求を実行し、それらを JSON で返します。

if($select)
{
    // Fetch data from the database.
    // Return the data with a JSON array (see below).
}
else
{
    $json[] = array
    (
        'message' => 'Not Requested'
    );
}
echo json_encode($json);
flush();

データベースからデータを取得する方法はもちろんオプションです。JSON を使用してデータベースから単一の行を取得するか、それを使用して複数の行を返すことができます。

json を使用して複数の行を返す方法の例を示します (javascript (データ) で反復処理します)。

function selectMultipleRows($db, $query)
{
    $array = array();
    $stmt = $db->prepare($query);
    $stmt->execute();
    if($result = $stmt->fetchAll(PDO::FETCH_ASSOC))
    {
        foreach($result as $res)
        {
            foreach($res as $key=>$val)
            {
                $temp[$key] = utf8_encode($val);
            }
            array_push($array, $temp);
        }
        return $array;
    }
    return false;
}

次に、次のようなことができます。

if($select)
{
    $array = array();
    $i = 0;

    $query = 'SELECT e.result1, e.result2 FROM exampleTable e ORDER BY e.id ASC;';
    foreach(selectMultipleRows($db, $query) as $row)
    {
        $array[$i]["result1"] = $row['result1'];
        $array[$i]["result2"] = $row['result2'];
        $i++;
    }

    if(!(empty($array))) // If something was fetched
    {
        while(list($key, $value) = each($array))
        {
             $json[] = array
             (
                 'result1' => $value["result1"],
                 'result2' => $value["result2"],
                 'message' => 'success'
             );
       }
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

または、KISSしたい場合(単純に愚かにしてください):

データベースからいくつかの値を選択し、単一の行を返す基本的な関数を初期化します。

function getSingleRow($db, $query)
{
    $stmt = $db->prepare($query);
    $stmt->execute();
    // $stmt->execute(array(":id"=>$someValue)); another approach to execute.
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if($result)
    {
        $array = (
            'result1' => $result['result1'], 
            'result2' => $result['result2']
        );
        // An array is not needed for a single value.
        return $array;
    }
    return false;
}

次に、行 (または単一の値) をフェッチし、JSON で返します。

if($select)
{
    // Assume that the previously defined query exists.
    $results = getSingleRow($db, $query);
    if($results !== false)
    {
         $json[] = array
         (
             'result1' => $results['result1'],
             'result2' => $results['result2'],
             'message' => 'success'
         );
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

$("#tab") の値を取得したい場合は、$("#tab").val() または $("#tab").text() のようにする必要があります。

それが役立つことを願っています。

于 2013-03-06T21:15:52.983 に答える
1

次のいずれかを使用することをお勧めします。

b = jQuery.parseJSON(data)

詳細はこちら または

$.getJSON

eval() の代わりに

于 2013-03-06T21:14:12.453 に答える