#javascript #php #jquery #oauth #getjson
#javascript #php #jquery #oauth #getjson
Вопрос:
Я работаю над скриптом, который использует jQuery (getJSON) для извлечения значений со страницы PHP. Страница PHP корректно отображает закодированный объект с правильными ключами и значениями, причем значения извлекаются из $_SESSION
переменной. Однако, когда javascript пытается получить доступ к этой странице, объект извлекается, но только ключи остаются нетронутыми, а значения заменяются на null
. Возвращаемые значения извлекаются null
из $_SESSION
, тогда как любые значения, добавленные вручную, возвращаются правильно. Можно ли этого избежать / исправить? Было бы разумнее хранить токены доступа в файлах cookie, а не в сеансах?
Примеры кода:
<?php
session_start();
$token = $_SESSION['token'] -> access_token;
$information = [
"media_token" => $token,
"test" => "testing"
];
print json_encode($information); //when page is directly accessed,
//returns correct information
?>
Javascript:
$.getJSON('oauth.php', function (data){
console.log(data); // media_token: null
// test: testing
});
Ответ №1:
Оказывается, проблема заключалась в том, что я обращался к странице, содержащей JS, используя страницу, отличную от www, тогда как добавление www устранило проблему. Не уверен, почему, но, очевидно, это изменилось, если страница могла получить доступ к $ _SESSION или нет. Если бы кто-нибудь мог объяснить, почему это так, это было бы здорово, приветствия.
Ответ №2:
Попробуйте этот код, он поможет вам
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function() {
$.getJSON('oauth.php', function (data){
console.log(data); // media_token: null
// test: testing
});
});
</script>
</head>
<body>
<div class="title">
<h2>PRESS</h2>
<p>hello</p>
</div>
</body>
</html>
oauth.php файл
session_start();
$_SESSION['token']="Hello1212";
$token = $_SESSION['token'];// -> access_token;
$information = array(
"media_token" => $token,
"test" => "testing"
);
print json_encode($information); //when page is directly accessed,
//returns correct information
Комментарии:
1. Токен может быть отправлен через javascript ‘oauth.php?token=value’. Это поможет вам получить ценность.
2. Спасибо за ответ — значение $_SESSION[‘token’], безусловно, устанавливается как при прямом доступе oauth.php результирующий вывод выглядит следующим образом:
{"token":"283Eeh.380dc4hgpp74d0d8c939d12oll","test":"testing"}
но проблема остается в том, что когда $.getJSON обращается к странице,media_token
возвращается какnull
, но возвращаются ключtest
и значениеtesting
…3. я получил значения на странице: Object { media_token=»Hello1212″, test=»тестирование»}
4. PHP блокирует доступ к файлу сеанса во время выполнения ajax-вызова, чтобы убедиться, что данные не повреждены во всех соединениях, поэтому вам нужно использовать session_write_close() для завершения записи, чтобы получить ответ от второго ajax-вызова.