Неувязочка с передачей данных

WA
На сайте с 23.01.2009
Offline
101
628

Файл handler.js

$(function(){

$("#adv").click(function(){
$(function(){
$.post('/job_confirm.php', {session: "<?=$_SESSION['session'];?>", job_id: "<?=$_GET['id'];?>"}, function(html){$("#adv").html(html); window.setTimeout("window.location='/cabinet/jobs/';", 3000);}, "text");
});
});
});

Файл job_confirm.php

 <?php

//сокращено
$session = $_POST['session'];
$job_id = $_POST['job_id'];
//сокращено
?>

При подключении файл handler.js на странице index.php способом

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

Файл job_confirm.php не видит данные, которые передал handler.js

Если же делать так:

<script> 

$(function(){
$("#adv").click(function(){
$(function(){
$.post('/job_confirm.php', {session: "<?=$_SESSION['session'];?>", job_id: "<?=$_GET['id'];?>"}, function(html){$("#adv").html(html); window.setTimeout("window.location='/cabinet/jobs/';", 3000);}, "text");
});
});
});
</script>

То данные handler.js видит.

Подскажите как сделать, что бы при подключение через

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

все было нормально?

Спасибо.

wdsg
На сайте с 09.02.2009
Offline
31
#1

Дело в том, уважаемый WebAction, что конструкция <?=$_SESSION['session'];?> является вызовом интерпретатора PHP, эквивалентным echo $_SESSION['session'];. В файле с расширением php такой вызов обрабатывается корректно. При подключении же внешнего js-файла, <?=$_SESSION['session'];?> не обрабатывается должным образом (js-файл обычно не ассоциирован с PHP) и представляет собой фактически набор символов.

Необходимо сделать в php-файле:

<script type="text/javascript">var sess = '<?=$_SESSION['session'];?>';</script>
<script type="text/javascript" src="/engine/js/handler.js"></script>

и использовать в handler.js объявленную переменную sess.

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
Bitman
На сайте с 05.07.2009
Offline
112
#2

Как вариант, разрешить в htaccess исполнение php в js-файлах (AddType application/x-httpd-php .js)

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)
WA
На сайте с 23.01.2009
Offline
101
#3

wdsg спасибо за ответ. Получил некоторые знания. Предложенный вариант работает, но можно ли как то по другому обработать переменную?

Не хочется светить содержимое переменной уж так явно..

Буду очень признателен за корректное решение)

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#4
WebAction:
wdsg спасибо за ответ. Получил некоторые знания. Предложенный вариант работает, но можно ли как то по другому обработать переменную?
Не хочется светить содержимое переменной уж так явно..
Буду очень признателен за корректное решение)

Делайте очень просто.

Берёте файлик переименовывайте в handler.js.php

В самом начале этого файла пишите:

<? Header("content-type: application/x-javascript"); ?>

и всё)) теперь можете использовать любые PHP вставки, а на выходе будет JS :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
wdsg
На сайте с 09.02.2009
Offline
31
#5

Что у Вас в $_SESSION['session']? Идентификатор сессии? Свой или встроенный md5/sha-1? Дело в том, что если Вам необходимо использовать сесси при обработке AJAX-обращений, так или иначе, но идентификатор сессии придётся светить. Если Вы просто хотите спрятать идентификатор от пятилетних спецов, можно, например, получать его из печенек непосредственно перед запросом:

function getCookie(name) {

var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = cookie.indexOf(";", offset)
if (end == -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
return setStr;
}
$(function() {
$("#adv").click(function(){
$(function(){
$.post('/job_confirm.php', {session: getCookie('MyCookie'), job_id: "<?=$_GET['id'];?>"}, function(html){$("#adv").html(html);
window.setTimeout("window.location='/cabinet/jobs/';", 3000);}, "text");
});
});
});

Разрешать серверу обработку PHP в js-файлах, или генерировать js с помощью PHP без ЯВНОЙ необходимости, не рекомендую.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий