You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下拉选择框切换时获取并提交全表单数据的技术问题

Fix: Collect Full Form Data on Country Dropdown Change in Laravel AJAX

Got it, the core issue here is that your current AJAX request only sends the country ID as a URL parameter—none of the other form fields (address, pincode, hidden price) are being passed to the controller. That’s why $request->all() isn’t returning all the data you expect. Let’s fix this step by step:

Step 1: Update AJAX to Send Entire Form Data

Instead of just passing the country ID in the URL, we’ll serialize the entire form and send all its fields. We’ll use POST (more appropriate for form submissions) and include Laravel’s required CSRF token:

<script type="text/javascript">
  $('#country').change(function(){
    var cid = $(this).val();
    if(cid){
      $.ajax({
        type:"POST",
        url:"{{url('/ava')}}", // Remove the country ID from the URL
        data: $('#formid').serialize(), // This grabs ALL form fields automatically
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') // Critical for Laravel POST requests
        },
        success:function(res) {
          alert(res);
        }
      });
    }
  });
</script>

Step 2: Adjust Your Route

If your original route included a {cid} parameter (like Route::get('/ava/{cid}', ...)), update it to accept POST and remove the parameter (since the country ID is now part of the form data):

// In routes/web.php
Route::post('/ava', [YourControllerName::class, 'avatax']);

Step 3: Verify Controller Data Access

Your existing controller code will now work as expected. When you run $request->all(), it will return an array containing all form fields: address, pincode, price, and country (the selected country ID).

Keep your test code to confirm:

public function avatax(Request $request){
  $data = $request->all();
  print_r($data); // This will show all form data now
  die();
  // Rest of your Avalara code...
}

Optional: If You Need to Keep Country ID in the URL

If you have a reason to retain the country ID in the URL, you can send both the URL parameter and form data via GET (though POST is still preferred for forms):

$.ajax({
  type:"GET",
  url:"{{url('/ava')}}/"+cid,
  data: $('#formid').serialize(), // Adds form fields as query parameters
  success:function(res) {
    alert(res);
  }
});

In this case, keep your original route (Route::get('/ava/{cid}', ...)), and $request->all() will include both the cid URL parameter and all form fields.

Important Note

Make sure your layout includes the CSRF meta tag (required for Laravel POST requests):

<meta name="csrf-token" content="{{ csrf_token() }}">

That’s all! Now when you select a country from the dropdown, the full form data will be sent to your controller, and $request->all() will return everything you need.

内容的提问来源于stack exchange,提问作者Yadav Sanjay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:24