2012-11-28 215 views
-3

現在我的問題的解決方案似乎非常基礎。雖然我理解php運行服務器端,但我不知道即使include包含在ajax回調函數中,php也會在頁面載入器上運行。雖然我可以通過在javascript值屬性中返回php來顯示查詢結果,但是如果我沒有包含對php腳本的引用,那麼我會得到未終止的字符串錯誤。我現在意識到的是(我認爲)include引起了php在ajax被解僱之前運行,這就是php爲什麼會在一個未定義的索引中發出噓聲。硬編碼一個ID到PHP會運行良好,因爲它不需要從Ajax的任何東西來運行查詢。在回調中刪除include會導致一個未定義的文字錯誤,因爲沒有任何可以引用的內容,php破壞導致解析器看到.value =「這個字面上沒有終止。通過刪除php include並通過JSON返回查詢結果,一切正常無論如何,寶貴和有用的經驗教訓...無法將JavaScript變量傳遞給PHP

該應用程序是拉日誌數據,作出修改和保存爲一個新的或更新的日誌文件ajax向php腳本發送一個ID以獲取舊信息並填充每行單元格第二個單元格(act-col)根據第一個單元格中的選擇動態加載(reg-col )爲了讓用戶不僅可以看到舊信息,而且還可以進行更改,第二次Ajax調用以獲得正確的選項,任何已經存在的清空並且加載新的選項。這也確保了選擇框的定義,因爲最初,直到有東西放在註冊表單元格中,動作列單元格基本上是一個空框。之後,剩下的單元格將加載舊信息,創建一個新行並循環顯示所有信息。將循環底部的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)); 
+1

不需要''$ ID = @ $ _ POST ['id'];'不符合簡單性和防止未定義的索引錯誤的興趣 - 這只是懶惰和跛腳。做正確的事情 - 所有你需要的只是'isset()'和三元運算符(或者一個函數,如果需要更頻繁地執行這個操作) –

+0

加上webnet。@是一個抑制器,這是一個昂貴的方法isset($ _ POST [ id'])在條件將是理想的方式來包裝... ps,因爲有人會吼你,切換到PDO或mysqli –

+0

關於「isset」...我離開它,所以代碼將因爲沒有任何東西被傳入,所以isset將被返回false,並且所有的都會停止,因爲它會拋出一個錯誤,如果我選擇一個默認值,它將返回默認值,這不是懶惰的問題,而是嘗試發現問題,我意識到一個是抑制器,我把它放在那裏,所以通知不會停止腳本。 – ploebach

回答

1

你試圖在客戶端上執行服務器端腳本phpScripts/lastSession.php,這顯然不會工作。我並不完全清楚你想在那裏發生什麼,但似乎你希望腳本作爲你的ajax調用的一部分來執行。

+0

Ultranaut是對的,並且作爲你可以看到ajax調用的url參數是你要包含的文件,所以wha這裏的目標是?看起來你應該重定向到另一個頁面,或者在成功方法中返回json數據,然後按照你的意願書寫。無論這裏發生了什麼,絕對不會工作,除非這些內容包括只寫出JavaScript並在頁面加載時解析......即使它設法正確地寫入js,這也是一種不好的方式當然。 –

+0

關於「isset」...我將它關閉以便代碼執行。由於沒有任何內容被傳入,isset將被返回false,所有將停止,因爲它會引發錯誤。如果我選擇一個默認值,它將返回默認值。這不是一個懶惰的問題,這是一個試圖找出問題的問題。我意識到一個是抑制器,我把它放在那裏,所以我不必讓通知崩潰。 – ploebach

+0

對不起,我想我應該更清楚。該腳本返回的查詢結果將在表格中作爲一個值加以說明,如下所示:document.getElementsByName(「exercises []」)[i] .value =「<?php echo $ row_last ['exercise'];?>」 ; \t這工作正常。我遇到的問題是獲取ajax輸出id ='2360'以顯示在$ ID = $ _ POST ['id'];所以查詢將只返回與該$ ID相關的數據。 – ploebach