Вот что я пытаюсь сделать. У меня есть форма, которая использует JQuery для вызова AJAX в файл PHP. Файл PHP взаимодействует с базой данных, а затем создает содержимое страницы для возврата в качестве ответа AJAX; то есть содержимое этой страницы записывается в новое окно в функции успеха для вызова $.ajax
. Как часть содержимого страницы, возвращаемого файлом PHP, у меня есть простой тег HTML-сценария с файлом JavaScript. В частности:
<script type="text/javascript" src="pageControl.js"></script>
Это не отражено в php (хотя я пробовал это), это просто HTML. PageControl.js находится в том же каталоге, что и мой php-файл, который генерирует содержимое.
Независимо от того, что я пытаюсь, я не могу включить файл pageControl.js
в рабочее окно, созданное в ответ на успех вызова AJAX, или работать в нем. Я получаю ошибки типа «Ожидается объект» или переменная не определена, что заставляет меня поверить, что файл не включается. Если я скопирую JavaScript прямо в PHP-файл, вместо использования тега script с 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
Этот код выполняет AJAX-вызов файла PHP (process_report_request.php
), который создает содержимое страницы для нового окна. Этот контент взят из базы данных и HTML. В файле PHP я хочу включить другой файл javascript в заголовок с использованием javascript в новом окне. Я пытаюсь включить его следующим образом
<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>
Изменены имена папок путей для защиты невинных :)
Файл pageControl.js фактически находится в той же папке, что и файл кода jQuery и файл php, но я пытаюсь использовать полный путь, чтобы быть в безопасности. Я также могу получить доступ к файлу js, используя URL-адрес в браузере, и могу успешно включить его в статическую html-тестовую страницу с помощью тега src script.
После включения файла javascript в файл php у меня есть вызов к одной из его функций следующим образом (эхо из php):
echo '<script type="text/javascript" language="javascript">writePageControls();</script>';
Итак, как только php-файл отправляет все содержимое страницы обратно на вызов AJAX, открывается новое окно, и возвращенное содержимое записывается в него с помощью приведенного выше кода jQuery.
В строке writePageControls
я получаю сообщение об ошибке «Ошибка: ожидается объект» при запуске страницы. Однако, поскольку JavaScript отлично работает как на статической HTML-странице, так и при ее включении »inline "в файле PHP я думаю, что это какая-то проблема с путями.
Опять же, что бы я ни пытался, мои вызовы функций в файле pageControls.js не работают. Если я поместил содержимое файла pageControl.js в файл php между тегами script и ничего не изменил, он работает как положено.
Исходя из того, что некоторые из вас уже сказали, мне интересно, если разрешение пути к недавно открытому окну не является правильным. Но я не понимаю почему, потому что я использую полный путь. Кроме того, чтобы еще больше запутать, моя связанная таблица стилей прекрасно работает из файла PHP.
Извините за то, как долго это будет, но если у кого-то будет время взглянуть на это дальше, я был бы очень признателен. Я в тупике. Я новичок, когда дело доходит до всего этого , поэтому, если есть просто лучший способ сделать это и избежать этой проблемы, я весь слух (или глаза, я полагаю ...)