2

これは実際には、PHPスクリプトによってエコーされ、Javascriptによって受信/処理される配列の値を取得することに関する短くて単純な質問です。

質問の冒頭は、誰かが答えるのに十分な情報を提供する必要があります。私のさまざまな失敗した実験は、この長い質問の残りを構成します。

配列はjQueryAJAXコールバックを介して受信されますが、値を取得できませんでした。

これがajax呼び出しです:

$.ajax({
    type: "POST",
    url: "ajax/ax_all_ajax_fns.php",
    data: 'request=edit_timecard_entry&staff_id='+staff_id+'&tid='+tid,
    success: function(data){
        alert(data);
    }
}

ax_all_ajax_fns.phpによって送信されるコードは次のとおりです。

$staff_id = $_POST['staff_id'];
$t_id = $_POST['tid'];
$rCard = mysql_query("SELECT `staff_id`, `date`, `project_id`, `project_num`, `task_desc`, `hours` FROM `timecards` WHERE `t_id`='$t_id'");
$aCard = mysql_fetch_assoc($rCard);
print_r($aCard);
//  echo $aCard;

もちろん、私は情報print_r'dを必要とせず、それをエコーし​​たいのです。print_rは、正しいデータがPHPスクリプトによって送信されたことを示すために使用され、成功関数のalert()ボックスに正常にエコーされます。したがって、正しいデータが返され、(正しくフォーマットされている場合は)表示可能です。この方法で返されるデータは、alert()ポップアップでは次のようになります。

Array
(
    [staff_id] => 51
    [date] => 2012-10-18
    [project_id] => 0
    [project_num => 49
    [task_desk] => This is a task
    [hours] => 3.30
)

しかし、echoを使用して$ aCard配列を出力し、それをajax呼び出しの成功関数内で分解しようとすると、値を取得する方法がわかりません。私の試みは一貫して「未定義」の値を返しました。

成功関数では、の代わりにalert(data);、これを試しました:

var tce_staff_id = data['staff_id'];
alert(tce_staff_id);

この:

var tce_staff_id = data.staff_id;
alert(tce_staff_id);

私は何が欠けていますか?

アップデート:

json_encode()PHP命令に関する情報を提供してくれたMartinS.に感謝します。私はajaxスクリプトを次のように変更しました:

echo json_encode($aCard);

この結果はalert(data)から取得します。成功関数で:

{"staff_id":"51","date":"2012-10-18","project_id":"0","project_num":"49","task_desc":"This is a task","hours":"3.30"}

ただし、以下は「未定義」を返します。

alert(data.staff_id);
alert(data[0].staff_id);
var test = data.staff_id;
alert(test);

誰かが私が欠けているものを見ることができますか?alert(data)上記のすべてのコードは、ajax関数のsuccessコールバックの直後にあります。alert(data)上記のように機能し、必要なデータを表示します。

4

1 に答える 1

3

了解しました。マーティンSが正解でした。彼が信用のために立ち往生していたらいいのにと思います。彼の応答には、1つの要素しかありませんでした。

AJAX出力:

echo json_encode($aCard);

JAVASCRIPT成功コールバック関数:

var obj = jQuery.parseJSON(data);
alert(obj.date);
alert(obj.staff_id);

そして出来上がり!日付とstaff_idがアラートボックスに表示されます。

マーティン、私を正しい軌道に乗せてくれてありがとう。

于 2012-11-19T23:10:05.853 に答える