[英]Trouble passing JavaScript variable to PHP
我的問題的解決方案現在看起來非常基本。 盡管我了解 php 在服務器端運行,但我不知道 php 在頁面加載時運行,即使包含位於 ajax 回調中。 雖然我可以通過在 javascript 值屬性中返回 php 來顯示查詢結果,但如果我沒有包含對 php 腳本的引用,我就會得到未終止的字符串錯誤。 我現在意識到的是(我認為)包含導致 php 在 ajax 被觸發之前運行,這就是為什么 php 抱怨未定義的索引。 將 ID 硬編碼到 php 中會運行良好,因為它不需要來自 ajax 的任何內容來運行查詢。 刪除回調中的包含會導致未定義的文字錯誤,因為沒有任何引用,php 損壞導致解析器看到 .value = " 這實際上是未終止的。通過刪除 php 包含並通過 JSON 返回查詢結果,一切正常完美。似乎我的障礙被困在我如何學會將 php 數據返回到 html 上。無論如何,學到了寶貴而有用的教訓......
該應用程序用於提取日志數據、進行修改並保存為新的或更新的日志文件。 ajax 向 php 腳本發送一個 ID 以獲取舊信息並填充每一行單元格。 第二個單元格 (act-col) 根據第一個單元格 (reg-col) 中的選擇動態加載。 為了讓用戶不僅可以查看舊信息,還可以進行更改,進行了第二次 ajax 調用以獲取正確的選項。 然后清空已經存在的任何內容並加載新選項。 這也確保了選擇框的定義,因為最初,直到將某些內容放入 reg-col 單元格之前,act-col 單元格基本上是一個空框。 在剩余的單元格加載舊信息之后,將創建一個新行並循環遍歷直到顯示所有信息。 將 add row 函數放在循環底部會導致添加一個額外的行,但是當循環完成時,我發現使用 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));
您正在嘗試在客戶端上執行服務器端腳本phpScripts/lastSession.php
,這顯然是行不通的。 我不完全清楚您希望在那里發生什么,但似乎您希望該腳本作為 ajax 調用的一部分執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.