這是我想要完成的。 我有一個使用jQuery對PHP文件進行AJAX調用的表單。 PHP文件與數據庫交互,然后創建頁面內容以作為AJAX響應返回; 即,此頁面內容將寫入$.ajax
調用的成功函數中的新窗口。 作為PHP文件返回的頁面內容的一部分,我有一個簡單的HTML腳本標記,其中包含一個JavaScript文件。 特別:
<script type="text/javascript" src="pageControl.js"></script>
這不是在PHP中回應(雖然我已經嘗試過),它只是html。 pageControl.js與生成內容的php文件位於同一目錄中。
無論我嘗試什么,我似乎都無法獲得包含的pageControl.js
文件,或者在為響應AJAX調用成功而創建的新窗口中工作。 我最終得到像“預期的對象”或未定義的變量之類的錯誤,這讓我相信文件沒有包含在內。 如果我將JavaScript直接復制到PHP文件中,而不是將腳本標記與src一起使用,我可以使它工作。
這里有關於調用文件,php和jQuery AJAX之間的范圍解析的東西嗎? 我將來希望以這種方式包含javascript文件,並希望了解我做錯了什么。
再次問好:
我已經解決了這個問題,但仍然沒有運氣。 我將嘗試澄清我在做什么,也許這會帶來一些想法。 我按要求包含了一些代碼,以幫助澄清一些事情。
這是序列:
- 用戶選擇一些選項,然后單擊表單上的提交按鈕。
單擊表單按鈕由jQuery代碼處理,如下所示:
$(document).ready(function() { $("#runReport").click(function() { var report = $("#report").val(); var program = $("#program").val(); var session = $("#session").val(); var students = $("#students").val(); var dataString = 'report=' +report+ '&program=' +program+ '&session=' +session+ '&students=' +students; $.ajax({ type: "POST", url: "process_report_request.php", cache: false, data: dataString, success: function(pageContent) { if (pageContent) { $("#result_msg").addClass("successMsg") .text("Report created."); var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes"; // open a new report window var reportWindow = window.open("", "newReportWindow", windowFeatures); // add the report data itself returned from the AJAX call reportWindow.document.write(pageContent); reportWindow.document.close(); } else { $("#result_msg").addClass("failedMsg") .text("Report creation failed."); } } }); // end ajax call // return false from click function to prevent normal submit handling return false; }); // end click call }); // end ready call
此代碼對PHP文件( process_report_request.php
)執行AJAX調用,該文件為新窗口創建頁面內容。 此內容取自數據庫和HTML。 在PHP文件中,我想在新窗口中使用javascript包含另一個javascript文件。 我想把它包括如下
<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>
更改路徑文件夾名稱以保護無辜:)
pageControl.js文件實際上與jQuery代碼文件和php文件位於同一文件夾中,但我正在嘗試完整路徑只是為了安全。 我也可以使用瀏覽器中的URL訪問js文件,我可以使用腳本src標記將其成功包含在靜態html測試頁面中。
在javascript文件包含在php文件中之后,我調用了它的一個函數,如下所示(來自php的echo):
echo '<script type="text/javascript" language="javascript">writePageControls();</script>';
因此,一旦php文件將所有頁面內容發送回AJAX調用,則打開新窗口,並通過上面的jQuery代碼將返回的內容寫入其中。
當我運行頁面時, writePageControls
行是我收到錯誤“Error:Object expected”的地方。 但是,由於JavaScript在靜態HTML頁面中工作正常,並且在PHP文件中包含“內聯”時,它使我認為這是某種路徑問題。
同樣,無論我嘗試什么,我對pageControls.js文件中的函數的調用都不起作用。 如果我將pageControl.js文件的內容放在腳本標記之間的php文件中並且不做任何其他更改,它會按預期工作。
根據你們有些人已經說過的話,我想知道新打開的窗口的路徑分辨率是否不正確。 但我不明白為什么因為我正在使用完整的路徑。 另外,為了使問題更加混亂,我的鏈接樣式表在PHP文件中運行得很好。
抱歉這是多長時間,但如果有人有時間進一步研究這個問題,我將非常感激。 我很難過。 當涉及到很多這方面的時候我是新手 ,所以如果有更好的方法來做到這一點並避免這個問題,我全都是耳朵(或者我認為是眼睛......)