Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как передать переменную с jquery в php (https://javascript.ru/forum/jquery/17264-kak-peredat-peremennuyu-s-jquery-v-php.html)

Максим2 12.05.2011 16:18

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

Нужно передать переменную с jquery в файл php при нажатии вкладки. При нажатии первой вкладки, одно значение переменной, при нажатии второй вкладки другое значение этой же переменной.

У меня скрипт примерно такой.

$(document).ready(function()
{
$('div.box2').hide();
// Если пользователь кликнул на секцию 1
$('ul.tabs li.current1).click(function()
{
$('div.box2').hide();
$('div.box1').show();
Здесь нужно отправить в этот файл - (сайт.ru/файл.php)
переменную x - со значением 1

});
// Если пользователь кликнул на секцию 2
$('ul.tabs li.current2').click(function()
{
$('div.box1).hide();
$('div.box2').show();
Здесь нужно отправить в этот файл - сайт.ru/файл.php)
переменную x - со значением 2

});
});

Подскажите, пожалуйста, как это сделать?

0931454574 12.05.2011 16:28

Передача параметра методом GET

$.get( 'jquery.php', { one: 'one', php: 'php', jquery: 'jquery' });

то есть передаешь файлу jquery.php параметры one с значение one и т.д.

то есть можно повесить обработчик на все вкладки например если вкладки три и у каждой есть в css стиле свой ID

три вкалдки id=a1 id =a2 и id =a3

$('#a1').click(function() {   // это обработчик события клика на вкладке с id a1
       $.get( 'jquery.php', { id: 'a1'});  // отправка запроса get ом
     $('#a2').hide();
     $('#a3').hide();
});


и аналогично для остальных вкладок, но лучше однако сделать функцию которая принимает параметр и уже исходя из него отправляет запрос и скрывает все элементы кроме нужного.

если что то не работает или работает не так , пиши.

Максим2 12.05.2011 17:12

Если я правильно понял, Вы предлагаете написать так:
$('.current1).click(function()
{
$('div.box2').hide();
$('div.box1').show();
$.get( 'fail.php', { one: 'one' });

$('.current2').click(function()
{
$('div.box1).hide();
$('div.box2').show();
$.get( 'fail.php', { one: 'two' });

У меня так не работает:
В fail.php для проверки написано так:
echo 'Первая переменная: '.$_GET[one];
Результат:
Первая переменная:

0931454574 12.05.2011 17:38

1, При нажатии скрываются вкладки?
это для теста работы обработчика!
2. если нет то все нужно поместь в
$(document).ready(function()
 {
Здесь вставляете то что Вы написали, то есть обработчики кликов 
 });


3. Если вкладки таки скрываются , то следующее

В php лучше так
if (isset($_GET['one']))
{
echo ("Все ок");
}else{
echo ("Отстой");
}

и вариант отправки 2

jQuery.get( url, [data], [callback],[type] ) - загружает страницу, используя GET-запрос.


url - адрес страницы содержимое которой надо загрузить
[data] - необязательный параметр, данные которые надо передать загружаемой странице(в форме массива). По умолчанию (без [data]) выполняется как GET-запрос, однако, если будут переданы данные, выполнится как POST-запрос.
[callback] - функция, которая будет запущена когда данные буду подгружены.
[type] - тип данные которые возвращает URL. Возможные варианты: "xml", "html", "script", "json", "jsonp" или "text".


XML - идет загрузка XML файла, разбор файла делает jQuery
HTML - стандарт(по-умолчанию)
SCRIPT - загружается JAVASCRIPT-код
TEXT - обрабатывается как PLAIN TEXT (зачем?)
JSON, JSONP - мы не рассматриваем, для новичков это нереально круто!

Также у callback-функции появился второй параметр textstatus - содержащий отладочную информацию о загрузке url.

Возможные значения textStatus:


"timeout" - таймаут, возможно было превано соединение с сервером или компьютер отключился от интернета (да и такое бывает)
"error" - ошибка, просто ошибка
"notmodified" - URL уже загружался и с тех пор не изменился
"success" - URL успешно загружен
"parsererror" - URL загружен про при его обработке возникла ошибка, при типа данных XM


ЕСЛИ ВСЕ РАВНО НИЧЕГО НЕ ВЫЙДЕТ ТО ОПИШИ ЧТО КОНКРЕТНО НУЖНО, Я ВЕЧЕРОМ ОТВЕЧУ 100%
и все будет, ХОРОШО

Максим2 12.05.2011 18:05

Спасибо за советы. Но, пока не работает - "Отстой" получается. Вкладки скрываются при нажатии.
Конкретно описываю что есть сейчас и что нужно сделать:
1. Сейчас есть две вкладки. Они работают для переключения рубрикатора ("По алфавиту" и "По популярности"). Сейчас это осуществлено таким образом, что jquery подгружает два объемных файла, один с сортировкой рубрик по алфавиту, другой с сортировкой по популярности (подключение файлов инклудом). Но эти файлы отличаются между собой только одной строчкой.
2. Вот у меня и возникла мысль: "А нельзя ли использовать только один файл где бы было прописано условие: Если переменная x=1, то сортировка по алфавиту, если переменная x=2, то сортировка по популярности.
3. Мне кажется правильным решением является создание переменной x в скрипте, при нажатии пользователем на вкладку, передача необходимой переменной в файл с рубрикатором.

Я правильно думаю (если да, то как это правильно сделать?), или существует другое решение?

0931454574 12.05.2011 18:36

Вечером отпишу. только вопрос
Получается то что возращает php должно вставляться на страницу с вкладками?(это больше риторический вопрос)
Если нужно просто подгружать 1 из 2 имеющихся , то это элементарно, не нужно php. вечером напишу, где то после 19.30
Сделаю исходный пример.Так что держите связь.

0931454574 12.05.2011 20:17

$("#ВАША ВКЛАДКА КУДА БУДЕТ ЗАЛИВАТЬСЯ ФАЙЛ").load("fail.php", {one: one});


php будет генерить то что выводить и как ответ будет заливаться. Работает на фтп во всех браузерах.

А если прост оподгрузить один из файлов , то

$("#ВАША ВКЛАДКА КУДА БУДЕТ ЗАЛИВАТЬСЯ ФАЙЛ").load("Тут путь к загружаемому файлу");


Вот так должно работать, конечно если передача параметра обязательная , то первый вариант , если вдруг и он не работате, то 100% выложу исходник. Самому интересно.

Максим2 13.05.2011 11:42

Я думаю, так не получиться сделать то, что я хочу.
Я наверное, изначально неправильно задачу описал (из-за собственного незнания).
Попробую написать подругому:
Сейчас у меня есть вкладки:
<div class="section">
<ul class="tabs">
<li class="current">По алфавиту</li>
<li>По популярности</li>
</ul>
<div class="box visible"><? include ("./rubrikator.php");?> </div>
<div class="box"><? include ("./rubrikator_f.php");?> </div>
</div>
за переключение вкладок сейчас отвечает скрипт:
(function($) {
$(function() {

$('ul.tabs').delegate('li:not(.current)', 'click', function() {
$(this).addClass('current').siblings().removeClass ('current')
.parents('div.section').find('div.box').hide().eq( $(this).index()).fadeIn(150);return false;
})
})
})(jQuery)

Но можно и по другому написать, например как я выше писал. Главное чтобы задачу получилось решить.

Так как файл rubrikator.php отличается от файла rubrikator_f.php только одной строчкой:
$r = $db->query ( "SELECT * FROM $db_category $sql ORDER BY category " );
в файле rubrikator.php
$r = $db->query ( "SELECT * FROM $db_category $sql ORDER BY fcounter DESC" );
в файле rubrikator_f.php

Мне бы хотелось чтобы был только один файл rubrikator.php в котором каким то образом должно быть описано условие:
Если пользователь нажал на вкладку 1, то r= .... ORDER BY category
Если пользователь нажал на вкладку 2, то r= .... ORDER BY fcounter DESC
Как это сделать?

0931454574 13.05.2011 12:05

$("#ВАША ВКЛАДКА КУДА БУДЕТ ЗАЛИВАТЬСЯ ФАЙЛ").load("fail.php", {one: one});


такой вариант , главное что бы пхп отлавливал передачу параметра.
Попробуйте проверить на всякий случай и в POST и GET
Если получаете , то дальше

if ($_POST[one]=='one') // или get
{

}
else
{

}
Самое главное что бы доставить значение one
Оно же получается?
В любом случае сегодня сделаю и вечером выложу .
Будет работать так :
отправка запроса в файл пхп
формирование нужной страницы
загрузка во вкладку нужной страницы

До вечера тогда

bes 27.07.2013 22:34

они нашли друг друга: певица2 и некий номер :D

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.


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