Передача пост запроса в файл

JavaScript: Передача пост запроса в файл

Иногда полезно, иногда удобно использовать JS для отправки пост запросов в php файл.
В основном большинство вебмастеров при необходимости передать данные в файл создаю формы, добавляют кнопочки для отправки пост/гет запросов, это конечно же не плохо, но на мой взгляд если данных не много и нужно передать одно два значения, то желательно воспользоваться JS.

Может быть кто то собирается посетить город Черновцы и конечно же хочет провести свое время гуляя по паркам или же на природе, но представьте себе если погода в этот день дождливая, лужи и прочее, пользуйтесь для этого сайтом погода в Черновцах.
Давайте предположим что у нас есть файл (test.php) в котором нам необходимо принять пост запрос.
<?php
$_POST['id'];
$_POST['rel'];


Но так же лучше сделать какую нибудь простую проверку для примера, чтобы нам было ясно что мы все приняли и обработали, поэтому давайте изменим php код на следующий
<?php
    if($_POST['id'] && $_POST['rel'])
    {
        echo ok;
    }


На страницах сайта мы имеет кнопочку с содержанием id и rel вот такого плана
<div class="check" id="5" rel="news">отправить</div>


Привязываться будем к class, это немножко не правильно, но терпимо, лучше привязываться к id если он не формируется самим PHP скриптом и имеет одно и тоже значение.
Теперь нам нужно первым делом подключить ajax библиотеку
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>


Далее уже можно писать функцию на JS для отправки данных в файл

<script>
    // Какая функция всегда активна
    $(function(){
        start();
    });
    // Определяем клик и запускаем функцию setup
    function start(){
        $('div.check').click(setup);
    }

// Начинаем писать функцию отправки данных значений кнопки
function setup(){
    var $me = $(this);
    var id = $me.attr('id');
    var rel = $me.attr('rel');
    // Если кнопка не одна, то нужно определить по кликнули
    var $val = $('div.check[id="'+id+'"]');
    var val = $val.html();
    
    // передаем пост запрос
    $.post('http://site.ru/test.php',{id:id,rel:rel},function(data){
        // проверим получили ли мы в файле test.php данные
        // если получили php нам отдаст ok
    if(data == 'ok')
    {
        val = 'Все в порядке';
    }
    else
    {
        val = 'что то не так';
    }
    $val.html(val);
    });
    return false;
}
</script>


В последнем скрипте мы делаем так же проверку, чтобы мы смогли понять, принял ли данные PHP или же нет, в том случае если данные он не принял мы изменим содержимое кнопки на «что то не так». Это очень удобно как вам так и вашим пользователям, а самое главное ничего сложного при разработки данного скрипта.

4 комментария

avatar
А как сделать, чтобы отправить запрос не по клику, а например если выполняется условие, просто обрезать первую часть?
Например?:

<?php
if(1>0)
{ ?>
<script>

    var $me = $(this);
    var id = $me.attr('id');
    var rel = $me.attr('rel');
    // Если кнопка не одна, то нужно определить по кликнули
    var $val = $('div.check[id="'+id+'"]');
    var val = $val.html();
    
    // передаем пост запрос
    $.post('http://site.ru/test.php',{id:id,rel:rel},function(data){
        // проверим получили ли мы в файле test.php данные
        // если получили php нам отдаст ok
    if(data == 'ok')
    {
        val = 'Все в порядке';
    }
    else
    {
        val = 'что то не так';
    }
    $val.html(val);
    });
    return false;

</script>
<?php } ?>
avatar
а зачем тогда тут js? при том что тебе нужно js тут вобще не нужен
avatar
Мне нужно сделать передачу post запроса из одного файла в другой, только при выполнении условия, но не по клику, то есть без использования форм, а как реализовать ОТПРАВКУ данных post средставми php я не знаю.)
avatar
По моему ты куда то забегаешь не туда. Я просто не вижу кода в целом, но предположу что у тебя там все на классах, тогда должно быть как то так
class MY_Class {
    public function one($data)
    {
        echo '<pre>';
        print_r($data);
    }
}


В самом файле пишем что то вроде
<?php MY_Class::one(array('id' => '1000', 'name' => 'Название'))?>


Тебе это нужно? я просто не вижу полной картины того что тебе нужно.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.