Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   PHP запрос из JS скрипта (https://javascript.ru/forum/misc/50655-php-zapros-iz-js-skripta.html)

alexmixaylov 06.10.2014 12:27

PHP запрос из JS скрипта
 
Скрипт отслеживает значение селектов и записывает в переменные
$("select").change(function () {
        var from = $('select[name="from"]').val();
        var to = $('select[name="to"]').val();
    });

нужно сделать php запрос
$travelList = Travel::find_by_from_and_to( 'address', 'address');
в который вместо "address" вставить значения селектов
Ума не приложу как это сделать
Можно через аякс указать в пхп фале запрос, но как туда передать значения переменных?

Erolast 06.10.2014 12:53

$.post("./somescript.php", {one: 1, two: 2}, function(response) {
  alert(response);
}


$one = $_POST["one"];
$two = $_POST["two"];

echo($one." ".$two);


http://jquery.page2page.ru/index.php5/Ajax-запрос

alexmixaylov 06.10.2014 14:33

то есть, я могу в php файле достать инфу из ПОСТ массива?

Erolast 06.10.2014 14:36

Да. Если запрос был методом get - из массива $_GET.

danik.js 06.10.2014 19:58

Еще это: var from, var to можно не писать:

$.post('script.php', $('select').serialize(), function(){})


Если селекты в форме, то можно еще так:
$(this.form).serialize()

Vlasenko Fedor 06.10.2014 23:10

Отправка post :dance:
function build_el(eltype, data) {
    var el = document.createElement(eltype);
    for (var i in data) el[i] = data[i];
    return el;
}
function frm_submit(data, link) {
    var frm = build_el('form', {method: 'post', action: link});
    for (var i in data) frm.appendChild( 
        build_el('input', {type: 'hidden', name: i, value: data[i]})
    );
    document.body.appendChild(frm);
    frm.submit();
    document.body.removeChild(frm);
}
frm_submit({name: 'Ivan', year: '25'}, 'index.php');

danik.js 07.10.2014 09:34

Poznakomlus, ничего бредовее не видел. Это хоть в каком-то браузере сработает? Форму надо во фрейм скрытый ложить, так то.
Собсно, это и сделано в jquery.form.js , но только для файловых инпутов. Ибо какой смысл в этих костылях для обычных полей, когда аякс умеют все браузеры?

Vlasenko Fedor 07.10.2014 12:05

Цитата:

Сообщение от danik.js
Poznakomlus, ничего бредовее не видел

Не понравилась функция build_el ? Которая создает элементы
Цитата:

Сообщение от danik.js
Это хоть в каком-то браузере сработает?

Тут нет привязки к каким либо браузерам. И если есть аякс, то ты считаешь правильно все запросы им слать? Есть еще счетчики с картинками, включением динамически js. Все то же костыли ведь есть XMLHttpRequest
Кроме того форму я могу слать куда угодно, ты же ограничен политикой безопасности

danik.js 07.10.2014 13:25

Poznakomlus, то есть хочешь сказать, что твой код асинхронно, без перезагрузки страницы отправит форму?
Цитата:

Сообщение от Poznakomlus
И если есть аякс, то ты считаешь правильно все запросы им слать?

Если есть инструмент, я считаю правильным использовать его по назначению.
Цитата:

Сообщение от Poznakomlus
Кроме того форму я могу слать куда угодно

А ответ получить сможешь? А я с кроссдоменным запросом - смогу )

Вот серьезно, напиши хоть один вариант использования твоего "скрипта". Зачем он нужен?

alexmixaylov 07.10.2014 13:42

Такая дискуссия, аж страшно :)
Цитата:

Сообщение от danik.js
$.post('script.php', $('select').serialize(), function(){})

Сделал так
$(document).ready(function () {
    $('select.find').on('change', function () {
        var itog = $('select.find').serialize();
        alert(itog);
        $.ajax({
            type: "POST",
            url: "calc.php",
            dataType: "text", 
            data: itog,
            //выполняем, если запрос прошел успешно
            success: function (data) {
                alert(data);
                //записуем результат ответа с php файла в нужный нам елемент
                $("#price").html(data);
                //выполним alert с одним из елементов ответа
            },
            //виполняем, если возникла ошибка
            error: function () {
                alert("Ajax не прошел");
            }
        });
    });
});

Делаю в обработчике echo ($_POST);
Ответ приходит пустой ( Array )

Erolast 07.10.2014 13:45

Цитата:

Делаю в обработчике echo ($_POST);
Ответ приходит пустой ( Array )
А как должно быть? :blink:

danik.js 07.10.2014 14:29

делай var_dump($_POST)

Vlasenko Fedor 07.10.2014 14:43

Цитата:

Сообщение от danik.js (Сообщение 333856)
Вот серьезно, напиши хоть один вариант использования твоего "скрипта". Зачем он нужен?

На самом то деле я написал эмуляцию работы стандартной формы. Работает все так-же само. Одна лишь разница, что форма не генерируется html разметкой, а генерируется js
По твоему, можно говорить формы нам не нужны. Уже совсем :)
И понятно, что говорить про асинхронность здесь не имеет смысла.

alexmixaylov 07.10.2014 14:49

а все есть
$neobrab = ($_POST['itog']);
работает

Теперь возникла другая проблема
при сериализации данные записываются в строку
from=air$to=train.....
когда я делаю unserialize, то результатом является не строка, а "bool(false)"

вообще то мне нужно только оставить последовательность значений через запятую, например
air, to, standart

danik.js 07.10.2014 16:09

unserialize - это не то вообще. Не нужно ничего делать, сервер сам парсит query-строку (a=x&b=y&c=z) в $_POST массив ( ['a'=>'x','b'=>'y','c'=>'z'] )
Цитата:

Сообщение от alexmixaylov
вообще то мне нужно только оставить последовательность значений через запятую

echo implode(', ', $_POST)


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