私の問題の解決策は非常に基本的なようです。PHPがサーバー側で実行されることは理解していましたが、インクルードがajaxコールバックに含まれていても、phpがページロードで実行されることを知りませんでした。javascript の value 属性で php を返すことでクエリ結果を表示できましたが、php スクリプトへの参照を含めないと、未終了文字列エラーが発生しました。私が今気付いたのは、(私が思うに) インクルードが原因で、ajax が起動される前に php が実行されたため、未定義のインデックスについて php が鳴ったことです。クエリを実行するために ajax から何も必要としないため、ID を php にハードコーディングしても問題なく実行されます。コールバックのインクルードを削除すると、未定義のリテラル エラーが発生しました。これは、参照するものが何もないため、php が壊れて、パーサーが .value = " を認識し、文字どおり終了していないためです。PHP インクルードを削除し、JSON 経由でクエリ結果を返すことで、すべてが完全に機能します。私のロードブロックは、phpデータをhtmlに返す方法を学んだ方法で立ち往生しているようでした. とにかく、貴重で有益な教訓が得られました...
アプリケーションは、ログ データを取得し、変更を加えて、新しいログ ファイルまたは更新されたログ ファイルとして保存します。ajax はクエリの php スクリプトに ID を送信して、古い情報を取得し、各行セルに入力します。2 番目のセル (act-col) は、最初のセル (reg-col) での選択に基づいて動的にロードされます。ユーザーが古い情報を表示するだけでなく、変更もできるようにするために、適切なオプションを取得するための 2 回目の ajax 呼び出しが行われます。すでに存在するものはすべて空になり、新しいオプションがロードされます。これにより、選択ボックスが定義されていることも確認されます。最初は、reg-col セルに何かが配置されるまでは、act-col セルは基本的に空のボックスだからです。その後、残りのセルに古い情報が読み込まれ、新しい行が作成され、すべての情報が表示されるまでループします。ループの最後に行追加関数を配置すると、余分な行が追加されますが、ループが完了すると、JavaScript を使用してそれを削除すると、ユーザーが最初からログを作成するかのように発生するすべての数学関数が実際にトリガーされることがわかりました。おそらく最良の解決策ではありませんが、最初のボタンクリックでそれらのフィールドにデータを入力するために別のテーブルからデータを取得する必要がなくなります。
よりよく理解できるようになったので、これを指し示すすべての提案を明確に見ることができます。ああ、まあ...初めてではなく、確かにその後ろのサイトが私を謙虚に(そして屈辱を与えた)最後ではありません. 最終的に機能したのは次のとおりです。
これがjavascript/jqueryです:
$(function(){
$.ajax({
type:'POST',
url: 'phpScripts/lastSession.php',
dataType: 'json',
data: {'id': pt_id},
cache:false,
success:function(data){
for(var j=0; j<data.length; j++){
var reg=data[j].region;
$(".reg-col:eq("+j+")").val(reg);
if ((reg)==="knee/hip"){ $(function(){ $.ajax({
url: 'phpScripts/getKneeHip.php',
dataType: 'json',
cache:false,
async:false,
success: function (json) {
$(".act-col:eq("+j+")").empty().end();
$.each(json, function(i, value) {
$('<option>').text(value).attr('value', value).appendTo( $(".act-col:eq("+j+")"));
});
}
});
});
}//end if
else if ((reg)=="shoulder"){ $(function() { $.ajax({
url: 'phpScripts/getShoulder.php',
dataType: 'json',
cache:false,
async:false,
success: function (json) {
$(".act-col:eq("+j+")").empty().end()
$.each(json, function(i, value) {
$('<option>').text(value).attr('value', value).appendTo( $(".act-col:eq("+j+")"));
})
}
});
});
}//end if
$(".act-col:eq("+j+")").val(data[j].activity);
$(".reps-col:eq("+j+")").val(data[j].reps);
$(".weight-col:eq("+j+")").val(data[j].weights);
$(".prps-col:eq("+j+")").val(data[j].purposes);
$(".time-col:eq("+j+")").val(data[j].time);
$(".type-col:eq("+j+")").val(data[j].type);
addRow('dataTable');
}
document.getElementsByName("chk[]")[j].checked=true;
document.getElementById('deleteBtn').click();
これがphpです:
$ID = $_POST['id'];
$return = array();
$query = mysql_query("SELECT * FROM history WHERE patient_id = '$ID' AND date_of_service IN (SELECT MAX(date_of_service) FROM history WHERE patient_id = $ID)");
while ($row = mysql_fetch_array($query,MYSQL_ASSOC)) {
array_push($return,array('region'=>$row['region'],'activity'=>$row['exercise'], 'reps'=>$row['reps'], 'weights'=>$row['weight'], 'purposes'=>$row['purpose'], 'time'=>$row['time'], 'type'=>$row['type']));
}
header('Content-type: application/json');
echo(json_encode($return));