@Norbyt

Почему Serialize собирает не все поля?

Есть задача собрать все поля формы и отправить их через ajax в php
Для сбора использую serialize но проблема в том что при загрузке страницы он собирает все поля но при отправки формы только два.
Нужно для cms bitrix
код template.php
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<form>
<?=$arResult["FORM_HEADER"]?>
<div style="display: none ;" class = "ajaxForm">
	<div id="popup_write" class="fancy_popup_block">
		<div class="popup_write">
			<h2>Написать нам</h2>
			<div class="popup_write_form">
				<div class="write__form">
<?foreach ($arResult["QUESTIONS"] as $FIELD_SID => $arQuestion):?>
		<div class="fieldset cf">
			<div class="fieldset__label">
				<span><?= $arQuestion['CAPTION'] ?></span>
			</div>
			<div class="fieldset__content">
				<input type="text" class="input_def" name="form_<?= $arQuestion['STRUCTURE'][0]['FIELD_TYPE'] ?>_<?= $arQuestion['STRUCTURE'][0]['QUESTION_ID'] ?>">
			</div>
		</div>
<?endforeach;?>
<div class="fieldset fieldset-2line cf">
	<div class="fieldset__label">
		<span>Введите цифры с&nbsp;картинки</span>
	</div>
	<?
CMain::CaptchaCheckCode();
include_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/captcha.php");
$cpt = new CCaptcha();
$cpt->SetCode();
?>
	<div class="fieldset__content">
	<div class="fieldset__capcha">
		<input id = "sid" type="hidden" name="captcha_sid" class = "code" value="<?= $cpt->GetSID() ?>" />
		<img src="/bitrix/tools/captcha.php?captcha_sid=<?= $cpt->GetSID(); ?>" alt="CAPTCHA" ></div>
		<input id = "captha" type="text" class="input_def fieldset__capcha_inp" name = "captcha_word">
	</div>
</div>
<div class="fieldset fieldset-btn cf">
	<div class="fieldset__label"></div>
	<div class="fieldset__content">
		<button id = "b" class="btn" <?= (intval($arResult["F_RIGHT"]) < 10 ? "disabled=\"disabled\"" : ""); ?> type="submit" name="web_form_submit" value="<?= htmlspecialcharsbx(strlen(trim($arResult["arForm"]["BUTTON"])) <= 0 ? GetMessage("FORM_ADD") : $arResult["arForm"]["BUTTON"]); ?>">Отправить</button>
		<div id = "error" class="error_text" style = "display:none;">Какие-то поля не заполнены<br>или неверно введена капча.</div>
	</div>
</div>
</div>
</div>
</div>
<div class="popup_write_ok" style="display: none;">
	<div class="write_inner_ok">
	<i class="icon-ok"></i>
				<div class="thanks">Спасибо за сообщение!</div>
			</div>
		</div>
	</div>
</div>
<?=$arResult["FORM_FOOTER"]?>
</form>


<script type="text/javascript">
		/*var dat = $('form').serialize();
		console.log(dat);*/
	$("#b").on("click",function()
	{
		var dat = $('form').serialize();
		console.log(dat);
			$.ajax({
				url:'/ajax/feedback.php',
				type: 'POST',
				dataType:'JSON',
				data:dat,
				success:function(data)
				{
					console.log(data);
					$.each(data, function(l,e){
						console.log(e);
					})
				},
				error: function()
				{
					console.log('error',arguments);
				}
			});
	});
</script>


непосредственно сам скрипт обработки:
<?
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
	$APPLICATION->RestartBuffer();
	foreach ($_REQUEST as $key => $value) {
		$result[$key] = $value;
}
	$i = 0;
	foreach ($_REQUEST as $key => $value) {
		$arParam[$key] = $value;
		$i++;
		//if($i == 3) break;
	}
	echo json_encode($_REQUEST);
	//echo json_encode($_REQUEST);
	if(CModule::IncludeModule("form"))
	{ 
		$arRes = array();
		//echo json_encode($arParam);
		if ($APPLICATION->CaptchaCheckCode($result['captcha_word'],$result['captcha_sid']))
		{	
			$arRes['rID'] = CFormResult::Add((int)$_REQUEST['form'], $arParam, "N");
		}
		else
		{
			$arRes['rID'] = CFormResult::Add((int)$_REQUEST['form'], $arParam, "N");
		};
		CFormResult::Mail($arRes['rID']);
		$error = CForm::Check((int)$_REQUEST['form'],$arParam,$arRes['rID'],"N","Y");
		//echo json_encode($error);
	}

?>
  • Вопрос задан
  • 1198 просмотров
Решения вопроса 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Serialize пропустит все поля у которых:
- нет атрибута name
- пустой value
- есть атрибут disabled
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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