@alexsteadfast
I am noob

Почему данные отправляются Get запросом а не пост как я указал?

Форма
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Добавление акции");
?>
	<form id="formPromo">
	    Название:<input name='name'/><br>
	    Дата:<input name='date' type ='date'/><br>
	    Описание:<textarea name='discription'></textarea><br>
	    Ссылка:<input name='addres'/><br>
	    Картинка:<input name='picture' type ='file'/><br>
	    <input value='Добавить' type='submit'>
	</form>
 <?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Jquery
(function ($) {
jQuery(document).ready(function ($) {
$("#formPromo").submit(function () {        
            var form_data = $(this).serialize();
            $.ajax({
                type: "POST",
                url: "/promo/edit/promo.php",
                data: form_data,
                success: function () {
                    alert('Форма успешно отправлена!');           
                }
            });
            return false;
        });
});
               })(jQuery);


Обработчик
<?php

$APPLICATION->SetTitle("Title");

if(isset($_POST['name'])&&$_POST['name']!="")
{
$name = htmlentities($_POST['name']);
//$date = htmlentities($_POST['date']);
//$discription = htmlentities($_POST['discription']);
//$addres = htmlentities($_POST['addres']);
//$picture =  htmlentities($_POST['picture']);
 

if (CModule::IncludeModule('iblock')){
            $el = new CIBlockElement;

            $arProp["NAME"] = $name;  
	    
           
           $arFields = array(
                'NAME' => $fio."-".$mail,               
                'MODIFIED_BY' => $USER->GetID(),             
                'IBLOCK_ID' => 13,
                'ACTIVE' => 'Y',


                'PROPERTY_VALUES' => $arProp
            );

            $intOfferID = $el->Add($arFields);
}

}
?>


Проблема в том, что запрос отправляется не постом, хотя в скрипте явно указан метод. Несмотря на это отправляется через get.
  • Вопрос задан
  • 1253 просмотра
Решения вопроса 2
SergeyKuzmenko
@SergeyKuzmenko
Я предполагаю, что при нажатии на кнопку "Добавить" форма отправляется на сервер ещё до обработки JS.
Как вариант, можно заменить
<input value='Добавить' type='submit'>
на
<button id="submit">Добавить</button>
Так же подредактировать обработчик:
$("#submit").click(function () {        
            var form_data = $("#formPromo").serialize();
            $.ajax({
                type: "POST",
                url: "/promo/edit/promo.php",
                data: form_data,
                success: function () {
                    alert('Форма успешно отправлена!');           
                }
            });
            return false;
        });
});
Ответ написан
@alexsteadfast Автор вопроса
I am noob
Проблема решена) Возможно ответ кому-то пригодится)
Вместо url: "/promo/edit/promo.php" -> url: "account/promo/edit/promo.php"
+
Написание скрытого инпута на форме, для передачи id блока обработчику.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@challenger1401
$(this).serialize(); возвращает строку. а в data должен быть объект
Ответ написан
@evgennikolaevich
Попробуйте так:
<form id="formPromo" method="post">
Ответ написан
@vaajnur
битриксоид
попробуй наряду с
type: "POST",
(для версий ниже 1.9.0)
указать
method: 'post'
(version added: 1.9.0)
Ответ написан
Возможно, кому-то поможет: на всякий случай, проверяйте порядок подключения JS-файлов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы