【问题标题】:Ajax - how to pass get value from form to Controller?Ajax - 如何将获取值从表单传递到控制器?
【发布时间】:2017-06-21 13:49:39
【问题描述】:

我有以下表格:

<form>
    <input type="email" name="email">
    <button>Join</button>
</form>

我想将 get 值传递给我的控制器,该控制器有路由到 /add/{email}

控制器代码:

public function addToNewsletterAction(Request $request){
    //Some actions
}

我如何传递获取值? 当前代码:

$(document).ready(function() {
    $("#newsletterButton").on("click", function() {
        var email = $('.email').val();
        $.ajax({
            type: 'get',
            url: "/add/newsletter/{email}",
            data: $("form").serialize(),
            succes: function() {
                alert("Done");
            }
        })
    })
})

【问题讨论】:

  • 显示你的 ajax。
  • 我刚刚更新了有问题的
  • 为什么将电子邮件作为路由的一部分,就像其他字段一样发布。此外,您的路线不应该是硬编码的,如果您在开发环境中,您将失去您当前的环境上下文。

标签: php ajax symfony get


【解决方案1】:

首先你需要改变它,这样你就可以发送一个变量,因为你在这里发送 "/add/newsletter/{email}" 这不是你想要的:

$(document).ready(function () {
    $("#newsletterButton").on("click",function () {
        var email = $('.email').val();
        $.ajax({
            type:'get',
            url: "/add/newsletter/".email,
            data:$("form").serialize(),
            succes: function () {
                alert("Done");
            }
        })
     })
})

然后在你的控制器中:

public function addToNewsletterAction($email){
   //do something with the email var
}    

但是您应该尝试通过您的 url 发送诸如 id 之类的内容,因此请更改您的路线:/add/newsletter

然后在你的控制器中你可以这样做:

public function addToNewsletterAction(Request $request){
    $email = $request->request->get('email');
    $other = $request->request->get('other')
 }    

别忘了更改你的 .twig :url:"/add/newsletter"

你的代码有问题。你的按钮没有 id,我想应该是 newsletterButton 这里

编辑 要获取电子邮件,您可以使用 getElementById 并在按钮中添加 onClick 函数。通过类似的方式更改您的表单:

<form>
    <input type="email" name="email" id="email">
    <button onclick="myFunction()">Join</button>
</form>

然后在您的脚本中添加 myFunction :

function myFunction() {
    var email = document.getElementById("email").value
    $.ajax({
        type:'get',
        url: "/add/newsletter/",
        data: {
            'email' : email,
        }
        succes: function () {
            alert("Done");
        }
    })
 })

})

【讨论】:

  • 我有带有 Json 响应的代码,如果我通过 /add/newsletter/admin@local.com 之类的参数,它可以正常工作。但我坚持从表单中获取价值。
  • @Chrzanek 我刚改了 ;)
  • 我喜欢你的方法,但请不要通过路由和获取参数发送数据。 JS 不适用于 $('.email'),因为该类不存在
  • 我只是适应了他的做法。但我补充说,通过 url 发送电子邮件之类的东西是个坏主意,他应该只做url:"/add/newsletter" 然后通过请求获取电子邮件
  • @Chrzanek 为什么不通过data: {email: email} 传递参数?
【解决方案2】:

尝试以下方法:

public function addToNewsletterAction(Request $request){
  $email = $request->email;
}

或者试试:

public function addToNewsletterAction($email=''){
  echo $email; //or whatever you want to do with email
}

【讨论】:

  • 我有代码,但我不知道如何通过 ajax 表单传递请求
  • 如果路由中有参数 email 你应该在路由定义中设置默认值。不在控制器操作中
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2019-11-01
相关资源
最近更新 更多