javascript - 将表单数据从表单的 View 传递到 Controller

标签 javascript php html laravel

我是 Laravel 新手,正在处理一个现有项目。我有一个将数据传递到 Laravel Controller 的表单:

<div class="share_popup" id="share_popup">
        <div class="row">
            <div class="col">
                <div class="body">
                    <button class="x">
                        <span class="sprite close"></span>
                    </button>

                    <div class="sprite logo"></div>
                    <!--<strong><span id="item_shared">Item name</span></strong>-->
                    <form id="email_form">
                        <input name="share_email" id="share_email" type="text" class="email" placeholder="Email" required>
                        <input name="share_name" id="share_name" type="text" class="name" placeholder="Name" required>
                        <input type="hidden" name="hint_id" id="hint_id" value="">
                        <span style="float:left;">Include a message below, if you'd like. test2</span><br/><br/>
                        <textarea name="message" id="message" placeholder="Message here..." class="description"> </textarea>

                        <button type="submit" onclick="shareHint(event)" id="share_button">Share</button>
                    </form>
                </div>
                </div>
        </div>
    </div>

这是提交时在 Controller 中运行的函数的简化版本:

function shareHint($hint_id) {
    $input = \Request::input();
    $passedemail = $input['email'];
}

$input['email']如何获取电子邮件地址:

<input name="share_email" id="share_email" type="text" class="email" placeholder="Email" required>

从表单的这一部分传递?

我不知道这种关联从何而来,但它正在消失。

如果我想要另一个表单字段,我将如何作为 Controller 功能的一部分访问它?

编辑:

我相信 Moppo 是正确的,因为这个 javascript 正在运行。

function shareHint(e, hint_id){
    e.preventDefault();
    var email = $("#share_email").val();

    var hinturl = window.location.protocol + "//" + window.location.host + "" + window.location.pathname + "?h="+data.currentHint._id; 

    var r = new XMLHttpRequest;
    r.open("POST", "/hint/"+ hint_id +"/share"), r.addEventListener("readystatechange", function() {
        if (4 == r.readyState)
            if (200 == r.status){ 
                $(".share_popup").css('visibility', 'hidden');
                $("#share_email").val("");
                $("#message").val("");
                //alert("Successfully shared hint with " + email + "!")
                $("#alert_error").html("Successfully shared hint with " + email + "!");
                $("#alert_popup").addClass("visible");
            }else if (400 == r.status) {
            var e = JSON.parse(r.responseText);
            //alert(e.message)
            $("#alert_error").html(e.message);
            $("#alert_popup").addClass("visible");
        } 
        else{
            $("#alert_error").html('Sorry, an error occurred');
            $("#alert_popup").addClass("visible");
        // alert("Sorry, an error occurred")
        }
    });
    var a = new FormData;
    a.append("hinturl", hinturl), a.append("email", email), a.append("message", $("#message").val()),a.append("_token", csrf_token), r.send(a)
}

最佳答案

如果名为 share_email 的输入作为 email 到达您的 Controller ,则可能是某些中间件修改了请求,从而改变了输入名称。因此,您应该检查应用程序的中间件,看看其中的某些中间件是否正在更改请求。

或者,某些 javascript 代码可能会在发送表单之前更改输入名称

编辑

查看代码可以看出,实际上是 javscript 发送了“电子邮件”输入:

var a = new FormData;
a.append("hinturl", hinturl), a.append("email", email),

关于javascript - 将表单数据从表单的 View 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754185/

相关文章:

javascript - JS通过函数增加索引号数组

javascript - 强制碰撞标签但不是它们在 d3 中的点

javascript - AngularJS $ 在不包含 jquery 的情况下无法工作

javascript - JavaScript 中有没有类似 Nothing 的东西?

javascript - 如何区分foreach循环中的每个提交按钮

php - 在 php Web 应用程序上创建 NodeJS 聊天

html - 证明内容 : space-between with equal space between first and last items also

javascript - 如何将数组文本框存储在cookie或本地存储中?

javascript - 尝试使用 jQuery 后加载一个 div

html - 为什么我的 table 不是水平相邻的?