【问题标题】:LARAVEL How can i submit form keeping existing query string intact in url [duplicate]LARAVEL我如何提交表单,在url中保持现有查询字符串的完整性[重复]
【发布时间】:2018-11-07 10:13:01
【问题描述】:

我有一个类似这样的 URL:foo?country=usa&state=nyfoo 我有一个表单,它为我提供了 firstnamelastname 的值,还有一些带有提交按钮的值。

但是当我点击submit 时,它会给出foo?firstname=john&lastname=doe 而另一个查询,即国家和州消失,或者换句话说,我正在失去它们。

任何人都可以告诉我,即使我正在提交表单,我该如何保留它们?

请注意:我不能使用任何隐藏字段,因为 foo Blade 中有很多表格,而且 foo Blade 可以有很多查询,而不仅仅是国家和州,可能还有年龄,邮政编码等

我在 foo.blade.php 中的表单是这样的

<form method="get" action ="{{Request::fullUrl()}}">
   <div class="form-group">
      <input type="text" class="form-control" name="firstname" placeholder="first name">
    </div>

    <button type="submit" class="btn btn-green-small">Apply</button>
</form>

    //Another form
 <form method="get" action ="{{Request::fullUrl()}}">

       <div class="form-group">
          <input type="text" class="form-control" name="lastname" placeholder="first name">
           </div>
        <button type="submit" class="btn btn-green-small">Apply</button>
    </form>

【问题讨论】:

标签: php html laravel laravel-5


【解决方案1】:

第 1 步 - 您可以使用 jQuery 将 onSubmit 事件连接到您的表单,在那里您可以序列化()表单字段以生成格式为 www-form-urlencoded 的字符串,其中包含您的名字和姓氏字段。

第 2 步 - 由于您有您的国家/地区,因此您可以轻松地将其从 window.location.href 中删除。

然后手动组合一个新的查询字符串来附加您的请求 URL。

例子:

假设你的表单有 id ="myform"

$("#myform").on("submit",function(){
  event.preventDefault(); //prevent submission
  let formData = $(this).serialize(); //outputs firstname=blah&lastname=moreblah

  let fullUrl = window.href.location;
  let queryPart = fullUrl.split("?")[1]; //here you have country=usa&state=ny

  let finalForm = queryPart + "&" formData;  //country=usa&state=ny&firstname=blah

  // submit here using 'finalForm' after your request endpoint
});

为了清楚起见,我省略了空/空检查。

【讨论】:

  • 我认为这是唯一的方法。但我不确定如何提交序列化数组或没有 ajax 的新表单数据。你也可以补充一下吗?截至目前,以你的例子我正在这样做。但很想知道它是如何做到的var formData=$(this).serialize(); var fullUrl = window.location.href; var finalUrl = fullUrl+"&amp;"+formData; window.location.href = finalUrl;
  • 不使用 AJAX 有什么具体原因吗?我实际上是在考虑到这一点的情况下回答的,哈哈。如果您分享您的 laravel 获取路线,我会尽力提供帮助。
  • 这基本上是一个类似于电子商务网站的搜索页面,您可以在其中搜索然后添加过滤器,这些过滤器也显示在 url 中。这就是其他原因。但是这个答案对我帮助很大,谢谢:)
  • 也许您可以将您的路线调整为:Route::get('search/{query}', 'Controller@method')-&gt;where('query','.+') 并在您处理业务的控制器方法中。一旦您能够编写通用 URL,您就可以调用 this.document.location.href = yourDomain + "/" + finalQuery; ,因为这将启动整个页面加载,它可能适合您的需要。
  • 是的,但是某些过滤器可能存在可能不存在某些过滤器可能有多个值,过滤器位置可能不同。例如,国家可以有多个值,例如美国、英国等,这就是我认为的原因是唯一的选择:P
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2012-02-02
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多