带有 ajax 和 jquery serialize() 的 POST 请求丢失了值

Posted

技术标签:

【中文标题】带有 ajax 和 jquery serialize() 的 POST 请求丢失了值【英文标题】:POST request with ajax and jquery serialize() lost values 【发布时间】:2016-11-09 14:55:15 【问题描述】:

我正在尝试从发布请求中检索四个值,但我只得到其中两个。该表单包含一个 ID、步骤、名称和电子邮件,但我只从隐藏的输入中获取这些。而不是用户填写的那些。我认为它可能是 jquery serialize() 但我不确定。

我尝试将输入更改为隐藏,然后添加 value="something" 并且它可以工作。为什么它不适用于常规文本?

//post请求的结果:

[position_id] => 229
[step] => 1
[name] => 
[email] => 

表格如下所示:

<form id="referral-form" action="#" method="post">

    <input type="hidden" name="position_id" value="$position->id" />
    <input type="hidden" name="step" value="1" />

    <div class="form-group">
        <input name="name" class="form-control" type="text" id="name" required/>
    </div>

    <div class="form-group">
        <input name="email" class="form-control" type="text" id="email" required />
    </div>
    <div id="legal">
        <span class="loader-button"></span>
        <div class="button submit"></div>
    </div>

</form>

我有一个 javascript 方法,如果用户点击 .button.submit 就会启动

onRef: function(e) 
    e.preventDefault();
    var $form = $("#referral-form");

    if(!$form.hasClass("ajax"))
    
        $form.addClass("ajax");
        $form.find('.error').css('display', 'none');

        var req = $.post('/reff/ref', $form.serialize());

        req.done(function(res) 
            $form.removeClass("ajax");

            if(res.success) 
                //do somthing
            
            else 
                methods.printErrors(res.errors, $form);

                mixpanel.track('onReferralValidationFailure', 
                    errors: res.errors,
                    positionId: exported.position.id,
                    companyId: exported.position.company_id
                );
            
        );

        req.fail(function() 
            $form.removeClass("ajax");

            mixpanel.track('onReferralUnknownError', 
                positionId: exported.position.id,
                companyId: exported.position.company_id
            );
        );
    
,

当我尝试在 php 中的 /reff/ref 函数中检索发布数据时,我只得到这些数据。

[2016-07-07 11:58:39] local.INFO: Array
(
    [position_id] => 229
    [step] => 1
    [name] => 
    [email] => 
)

这是 ref/ref 中的函数:

 public function refer() 
    $positionId = Input::get("position_id");
    Language::setLanguageByPositionId($positionId);

    if(Input::get("step") == 1) 
        $validator = new ReferralStepOneValidator(App::make('validator'));
        $validator->with(Input::all());

        Log::info(print_r(Input::all(), true));

        if($validator->passes()) 
            $input = Input::all();


            $referral = Referral::createReferralFromInput($input);

            return Response::json(array(
                'success' => true,
                'reference' => $referral->reference,
            ));
        
        else 
            return Response::json(array(
                'success' => false,
                'errors' => $validator->errors()->toArray(),
            ));
        
    

【问题讨论】:

你能显示 /reff/ref 中的内容吗? 确保$form 拥有所有正确的数据并且$form.serialize() 不会对他们做任何有趣的事情。 您可以检查您发送的数据(Chrome:开发者工具,网络)并验证在 post 请求中发送了哪些参数。 @awl19 我添加了参考参考 问题出在 /reff/ref - 我猜你正在使用我不熟悉的框架,所以我无法确切地知道你是如何通过JSON 数组,但如果您在 /reff/ref 中搜索“用户”或“电子邮件”,您将看到没有一个被调用或定义。 【参考方案1】:

对不起,我还不能评论。我正在看这个问题并尝试了一些事情。可以在发帖前放一个控制台日志吗?

<script>
$('#referral-form').click(function (e) 
    e.preventDefault();
    var $form = $("#referral-form");


    if(!$form.hasClass("ajax"))
    
        $form.addClass("ajax");
        $form.find('.error').css('display', 'none');

        console.log($form.serialize());

        var req = $.post('/reff/ref', $form.serialize());

        req.done(function(res) 
            $form.removeClass("ajax");

            if(res.success) 
                //do somthing
            
            else 
                methods.printErrors(res.errors, $form);

                mixpanel.track('onReferralValidationFailure', 
                    errors: res.errors,
                    positionId: exported.position.id,
                    companyId: exported.position.company_id
                );
            
        );

        req.fail(function() 
            $form.removeClass("ajax");

            mixpanel.track('onReferralUnknownError', 
                positionId: exported.position.id,
                companyId: exported.position.company_id
            );
        );
    
);
</script>

另外,你的 js 函数是否有可能没有在点击事件上执行?

【讨论】:

感谢您的回答。我的 Js 函数执行完毕。

以上是关于带有 ajax 和 jquery serialize() 的 POST 请求丢失了值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 json 和 php 的 jquery 的 $.ajax 函数上传文件

带有 Ajax 的 jQuery FancyBox

带有 LinQ 过滤器和 jQuery tmpl 示例的 jQuery AJAX 请求

使用带有 jquery $.ajax 调用的 Mozilla FormData

带有 ajax 图像更新的 jquery guillotine 插件

带有 templateResult 和 templateSelection 的 jquery select2 (4.0) ajax