Почему javascript не может использовать переменную javascript, которую я объявил в php-файле? - PullRequest
1 голос
/ 03 апреля 2011

Привет всем, эта проблема меня озадачила на прошлой неделе или около того, вот ситуация:

У меня есть сайт, размещенный на хостинге GoDaddy. В этом выпуске используются три файла: index.html, milktruck.js и xml_http_request.php, все они размещены в одном каталоге.

Файл index.html ссылается на файл milktruck.js со следующим кодом:

 <script type="text/javascript" src="milktruck.js"></script> 

Файл milktruck.js автоматически запускается при открытии сайта. На данный момент xml_http_request.php не сработал.

В строке 79 из 2000 я передаю переменную "simple" в функцию в файле milktruck.js с помощью:

 placem('p2','pp2', simple, window['lla0_2'],window['lla1_2'],window['lla2_2']);

"simple" никогда не инициализировался в файле milktruck.js. Вместо этого я включил следующую строку кода в файл xml_http_request.php:

 echo "<script> var simple = 'string o text'; </script>";

На данный момент я не сделал никаких ссылок на файл xml_http_request.php в файле milktruck.js. Я не ссылаюсь на этот файл до строки 661 файла milktruck.js со следующей строкой кода:

 xmlhttp.open('GET',"xml_http_request.php?pid="+pid+"&unLoader=true", false);

Все компилируется (я полагаю, потому что моя игра запускается), однако функция placem не работает должным образом, потому что строка 'string o text' никогда не появляется.

Если бы я закомментировал строку кода в php-файле, инициализирующую «simple», и включил следующую строку кода непосредственно перед вызовом функции placem, все работает нормально, и появляется текст:

 var simple = 'string o text';

Как вы думаете, где здесь проблема? Нужно ли вызывать php-файл, прежде чем я попытаюсь использовать «простую» переменную в файле javascript? Как бы я это сделал? Или что-то не так с моим кодом?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2011

Итак, мы встречаемся снова!

В комментариях к вопросу скрыта ссылка на фактический файл Javascript . Это 2200 строк, 73 КБ, и плохо отформатированы. Это также , полученное из демонстрации для API Google Планета Земля .

Как отмечено в комментариях здесь и в предыдущих вопросах, вы можете страдать от фундаментального недоразумения о том, как работает PHP и как PHP взаимодействует с Javascript.

Давайте посмотрим на строки 62-67 milktruck.js:

//experiment with php and javascript interaction

//'<?php $simpleString = "i hope this works"; ?>'


//var simple = "<?php echo $simpleString; ?>";

Причина, по которой это никогда не работало, состоит в том, что файлы с расширением .js не обрабатываются PHP без каких-либо причудливых изменений конфигурации на вашем сервере. Находясь на виртуальном хостинге, вы не сможете этого сделать. Вместо этого вы можете переименовать файл с расширением .php. Это позволит PHP обрабатывать файл и позволить фактически введенным командам работать.

Вам нужно будет сделать еще одно изменение в файле. В самом верху, самом самом верхе, прежде всего вам понадобится следующая строка:

<?php header('Content-Type: text/javascript'); ?>

Эта команда сообщит браузеру, что возвращаемый файл - это Javascript. Это необходимо, потому что PHP обычно выводит HTML, а не Javascript. Некоторые браузеры не распознают скрипт, если он не идентифицирован как Javascript.

Теперь, когда мы убрали это с пути ...

Вместо этого я включил следующую строку кода в файл xml_http_request.php:

Это вряд ли сработает. Если он работает , вероятно, это случайно. Мы не имеем дело с нормальной библиотекой ajax здесь. Мы имеем дело с какой-то дурацкой вещью, созданной людьми из Google Планета Земля очень и очень давно.

За исключением одного или двух во всем этом монолитном фрагменте кода, нет запросов ajax, которые фактически обрабатывают результат . Это означает, что маловероятно, что тег script может быть обработан. Кроме того, один или два, которые do обрабатывают результат, фактически обрабатывают его как XML и возвращают документ. Маловероятно, что тег script также обрабатывается там.

Это объяснит, почему переменная никогда не будет надежно отображаться в Javascript.

Если вам нужно вернуть исполняемый код из ваших вызовов ajax и сделать это надежно, вы захотите использовать зрелую, хорошо протестированную библиотеку Javascript, такую ​​как jQuery . Не волнуйтесь, вы можете смешивать и сочетать существующий код и jQuery, если вы действительно этого хотите. Есть вызов API только для загрузки дополнительных скриптов . Если вы просто хотели вернуть data , для этого и нужен JSON. Вы можете иметь код PHP, генерирующий JSON , и jQuery извлечь его . Это намного быстрее, проще и удобнее, чем ваш нынешний неудачный беспорядок.

Да, и получите Firebug или используйте инструменты разработчика Chrome / Safari, они избавят вас от боли в JavaScript.

Однако ...

Я собираюсь быть очень откровенным здесь. Это плохой код. Это ужасный код. Он плохо отформатирован, комментирование - шутка, и есть примерно одна точка семь миллиардов глобальных переменных. Код пугает меня. Это глубоко пугает меня. Я не решался бы дотронуться до него десятифутовым шестом.

Я бы не хотел, чтобы этот код оставался у моего злейшего врага , и вот вы здесь, пытаясь сделать с ним что-то странное.

От всей души призываю вас отточить свои навыки в кодовой базе, которая менее архаична и тупа, чем эта, прежде чем вернуться к этому проекту. Сохраните здравомыслие, уходите, пока можете!

0 голосов
/ 03 апреля 2011

возможно, инициализируйте ваши значения следующим образом: window.simple = 'бла-бла-бла'

, затем передайте window.simple

Вы можете попробовать отладчик, чтобы увидеть, что происходит, например.FireBug

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...