Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как передать значение в php (https://javascript.ru/forum/jquery/33750-kak-peredat-znachenie-v-php.html)

Mateus 06.12.2012 17:37

Как передать значение в php
 
Доброго времени суток. Попробую вкратце описать желаемый результат:

Из базы данных загружаю 5 фотографий:

pictures.php
$offset=5
if ($result = $mysqli->query("SELECT * FROM `photo` ORDER BY `id` DESC LIMIT $offset, 5", MYSQLI_USE_RESULT)) {

В конце страницы, которая вызывае pictures.php должен отображаться див с вызовом следующих 5 фотографий, т.е. $offset+5. После загрузки еще 5 фоток, опять такой див (Как доска на fb).

cmd 07.12.2012 00:14

ajax.
Вам нужен PHP обработчик и условия запроса.

Например по событию onclick делаем ajax запрос и выводим результаты в модальном окне.

<a href="#" onclick="load_more()">Загрузить ещё</a>
function load_more() {
  $.ajax({
    type: "POST",
    url: "http://my_site/load_more_photos.php",
    data: { count: "5", user: "<?=$username?>" }
 }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
}


Код load_more_photos.php
<?
print_r($_POST);
?>

Mateus 07.12.2012 01:04

Спасибо. Но всё таки сам не смог разобраться. Если я правильно понял, то после нажатия на "загрузить еще", должен запуститься load_more_photos.php и вывести "5" и значение $username?
В моём случае файл pictures.php делат запрос в mysql и выводит 5 фотографий из базы данных, мне нужно что бы после нажатия "загрузить еще " без перезагрузки опять запустился pictures.php со значением $offset += 5
Заранее благодарен!

cmd 07.12.2012 02:13

Не совсем. Ответ load_more_photos.php будет примерно таким
array('count' => '5', 'user' => 'тут_то_значение_которое_вы_подставите')

Я внес переменную $username только для того, чтобы показать как передать переменную из основного php-сценария в JS и дальше в PHP-обработчик.

Обычно основной сценарий и обработчик отличаются. Поэтому Вам лучше сделать pictures.php и pictures_ajax.php

Mateus 07.12.2012 02:36

Я просто убрал GET и одну переменную и поставил echo, по-этому и предположил, что выведет именно "5".

На данный момент, на странице index.php находится <div id="pagination" ><a href="#" class="add_more" ><input type="text" name="5" id="offset" />

Сама же функция

function load_more() {

$.ajax({
type: "POST",
url: "all_gags_just_uploaded.php",
data: {offset:"1"},
success: function(msg){
alert( "Data Saved: " + msg );
}
});

}

В результате, когда я вызываю с index.php ссылку на load_more, добавляется всё правильно, но не передается значение $offset т.е. добавляется код еще одного pictures.php. Что я делаю не так? Как передать значение $offset обратно в pictures.php при вызове функции load_more?

cmd 07.12.2012 16:23

1) Не надо ничего передавать назад. Просто счетчик вызовов сделайте:
var offset = 0;
function load_more() {
offset = offset  + 1;
$.ajax({
type: "POST",
url: "all_gags_just_uploaded.php",
data: {offset: offset },
success: function(msg){
alert( "Data Saved: " + msg );
}
});

}

Mateus 09.12.2012 17:34

Спасибо, cmd.
С этим разобрался. Счетчик работает и передает значение php обработчику. Но вся информация выводимая php выводится как alert, а мне нужно в виде html страницы (Т.е. что бы добавлялась еще одна фотография после той, которая уже есть на странице index.php). Как можно это сделать?

Mateus 09.12.2012 17:36

Если я правильно понял, то по Вашему скрипту, именно в переменной "msg" хранится вся необходимая информация, но она передается именно как alert.

cmd 09.12.2012 18:21

См в доках: append, appendTo, prepend

Например:
Цитата:

$('.inner').append(msg);

Mateus 10.12.2012 15:20

Огромная благодарность Вам, cmd.
Для моей цели больше подошел prepend.
Но после добавления новой инфы, окно поднимается в положение top, а мне нужно, что бы осталось на том же уровне. Как это сделать?


Часовой пояс GMT +3, время: 02:55.