Передача php параметров JSON
Приветствую!
Имеется скрипт чата, который передает параметры со страницы
$(function(){
var chat = $('#chat')[0]; // Окно чата
var form = $('#chat-form')[0]; // форма
// вешаем обработчик на отправку формы
$('#chat-form').submit(function(event){
// поле ввода
var text = $(form).find('input[type="text"]');
// выключаем форму пока не пришел ответ
$(form).find('input').attr("disabled", true);
// отправка сообщения
update(text);
// что бы форма не перезагружала страницу
return false;
});
function update(text) {
// что шлём
var send_data = {
last_id: $(chat).attr('data-last-id'),
};
if (text)
send_data.text = $(text).val();
// шлём запрос
$.post(
'Library/Classes/Chat.class.php',
send_data, // отдаём скрипту данные
function (data) {
// ссылка пришла?
if (data && $.isArray(data)) {
$(data).each(function (k) {
// формируем наше сообщение
var msg = $('<div>' + data[k].created + ': ' + data[k].text + '</div>');
// и цепляем его к чату
$(chat).append(msg);
// если ласт ид меньше пришедшего
if (parseInt($(chat).attr('data-last-id')) < data[k].id)
// запоминаем новый ласт ид
$(chat).attr('data-last-id', data[k].id);
});
// если это отправка, то при получении ответа, включаем форму
if (text) {
// вклчюаем форму
$(form).find('input').attr("disabled", false);
// и очищаем текст
$(text).val('');
}
// прокрутка
$(chat).scrollTop(chat.scrollHeight);
// обновим таймер
update_timer();
}
},
'JSON' // полученные данные рассматривать как JSON объект
);
}
// что бы при загрузке получить данные в чат, вызываем сразу апдейт
update();
// что бы окно чата обновлялось раз в 5 секунд, прицепим таймер
var timer;
function update_timer() {
if (timer) // если таймер уже был, сбрасываем
clearTimeout(timer);
timer = setTimeout(function () {
update();
}, 5000);
}
update_timer();
});
Форма: Код:
<div id="chat" data-last-id="0"></div>Пробовал так var send_data = { last_id: $(chat).attr('data-last-id'), var username = {$username}; }; Не получилось.. |
Цитата:
Цитата:
Цитата:
|
Цитата:
<script src="js/chat.js"></script> // вышепредставленный скрипт <?php $username = "demo"; // переменная, которая должна быть отправлена ?> |
Цитата:
Цитата:
<script> var username = "<?php echo $username ?>"; alert(username); </script> После обработки интерпретатором PHP в результате браузер получит: <script> var username = "demo"; alert(username); </script> Можешь нажать Ctrl+U и увидеть своими глазами. Кстати, можно вместо <?php echo $username ?> писать <?= $username ?> |
Действительно так она считывается, однако не получается ее передать, прописываю
var send_data = {
last_id: $(chat).attr('data-last-id'),
username: username
};
а мне приходит значение "1".. |
А в алерте правильное значение или тоже единица?
|
в сообщении все выводит правильно
|
Цитата:
$username = $_POST['username']; Или может у тебя переменная username перетирается случайно где-то, а ты не заметил? |
Тут в чем то еще дело, потому что числовой параметр передать удается..
Часть скрипта который принимает данные: // получаем id последнего сообщения $last_id = isset($_POST['last_id']) ? (int)$_POST['last_id'] : 0; // текст $text = isset($_POST['text']) ? trim($_POST['text']) : ''; На страничке форму дополнил следующим: <div id="chat" data-last-id="0" data-game-id="<?=$gameID;?>"></div> В вышеупомянутый скрипт приема данных добавил следующее $gameID = isset($_POST['gameID']) ? (int)$_POST['gameID'] : 0; В скрипт chat.js добавил var send_data = { ... gameID: $(chat).attr('data-game-id') Однако мне нужно передать имя пользователя, которое не несет числовое значение и способ который подходит для числовых переменных в данном примере не прокатывает.. |
Цитата:
|
Да я понимаю, пробую сделать как в приеме текста ($text), но все ровно не получается..
|
Цитата:
|
Вставляю такую строчку
$username = isset($_POST['username']) ? trim($_POST['username']) : ''; сообщения вообще не отправляются если делаю просто $username = $_POST['username'], то посылается единица.. |
посмотри в консоли браузера что отправляется при запросе. Вкладка Network. В хроме смотри Form Data.
|
Что-то не могу найти Form Data в консоли.
Кстати пробовал делать так, в файле Index: <input type="hidden" id="username" name="username" value="<?=$username;?>"> в скрипте: var username = $("#username").val(); Но и это не помогло.. |
Цитата:
|
Алер выдает т.к. само значение существует, но скрипт не передает и все..
|
Цитата:
Цитата:
Консоль открывай до запроса, иначе запрос не увидишь. |
Цитата:
last_id:298 gameID:554 username:admin |
cript, ну значит ищи подвох в PHP скрипте, который принимает этот запрос. Если выдает единицу - значит где-то все-таки строка приводится к числу.
|
| Часовой пояс GMT +3, время: 23:58. |