如何利用Ajax实现地区三级联动详解

下面是详细讲解“如何利用Ajax实现地区三级联动”的攻略。

一、前置知识

在学习本攻略之前,建议您掌握以下知识:

  • HTML、CSS、JavaScript的基础知识
  • jQuery库的使用

二、需求分析

本次攻略是要实现一个地区三级联动的功能,即:根据用户选择的省、市、区,实时动态加载下一个级别的选项列表。

为了达到这个目的,我们需要先上手写一个基本的HTML结构,如下所示:

<form action="">
  <select name="province" id="province">
    <option value="">请选择省份</option>
  </select>
  <select name="city" id="city">
    <option value="">请选择城市</option>
  </select>
  <select name="area" id="area">
    <option value="">请选择区域</option>
  </select>
</form>

三、实现思路

下面,我们来看一下实现这个功能的思路:

  1. 基于Ajax向后端发送GET请求,获取省份数据,并填充到省份选项列表。
  2. 监听省份选项列表的change事件,当用户选择省份后,再基于Ajax向后端发送GET请求,获取对应的城市数据,并填充到城市选项列表中。
  3. 监听城市选项列表的change事件,当用户选择城市后,再基于Ajax向后端发送GET请求,获取对应的区域数据,并填充到区域选项列表中。

四、实现代码解析

1. 获取省份数据

我们可以先在页面加载完成后,就调用Ajax方法向后端请求省份数据,并将数据填充到省份列表中。

$(document).ready(function() {
  // 请求省份数据
  $.ajax({
    type: "GET",
    url: "url/to/provinces",
    dataType: "json",
    success: function(data) {
      // data为后端返回的省份数据,其结构如下所示:
      // [
      //   { id: 1, name: "省份1" },
      //   { id: 2, name: "省份2" },
      //   ...
      // ]
      // 将数据填充到省份选项列表中
      var $province = $("#province");
      $.each(data, function(index, item) {
        $province.append("<option value='" + item.id + "'>" + item.name + "</option>");
      });
    }
  });
});

2. 获取城市数据

当用户选择省份后,下一步就是根据用户选择的省份,请求相应的城市数据,并将数据填充到城市选项列表中。

$("#province").change(function() {
  // 获取用户所选的省份的id
  var provinceId = $(this).val();
  if (provinceId) {
    // 向后端请求对应的城市数据
    $.ajax({
      type: "GET",
      url: "url/to/cities?province_id=" + provinceId,
      dataType: "json",
      success: function(data) {
        // data为后端返回的城市数据,其结构如下所示:
        // [
        //   { id: 1, name: "城市1" },
        //   { id: 2, name: "城市2" },
        //   ...
        // ]
        // 将数据填充到城市选项列表中
        var $city = $("#city");
        $.each(data, function(index, item) {
          $city.append("<option value='" + item.id + "'>" + item.name + "</option>");
        });
        // 清空区域选项
        $("#area").empty().append("<option value=''>请选择区域</option>");
      }
    });
  } else {
    $("#city").empty().append("<option value=''>请选择城市</option>");
    $("#area").empty().append("<option value=''>请选择区域</option>");
  }
});

3. 获取区域数据

当用户选择城市后,最后一步就是根据用户选择的城市,请求相应的区域数据,并将数据填充到区域选项列表中。

$("#city").change(function() {
  // 获取用户所选的城市的id
  var cityId = $(this).val();
  if (cityId) {
    // 向后端请求对应的区域数据
    $.ajax({
      type: "GET",
      url: "url/to/areas?city_id=" + cityId,
      dataType: "json",
      success: function(data) {
        // data为后端返回的区域数据,其结构如下所示:
        // [
        //   { id: 1, name: "区域1" },
        //   { id: 2, name: "区域2" },
        //   ...
        // ]
        // 将数据填充到区域选项列表中
        var $area = $("#area");
        $.each(data, function(index, item) {
          $area.append("<option value='" + item.id + "'>" + item.name + "</option>");
        });
      }
    });
  } else {
    $("#area").empty().append("<option value=''>请选择区域</option>");
  }
});

至此,地区三级联动功能就实现了。

五、示例

以下是两个示例:

示例一:基于静态JSON数据

前端代码:

$(document).ready(function() {
  // 请求省份数据
  $.getJSON("data/provinces.json", function(data) {
    // 将数据填充到省份选项列表中
    var $province = $("#province");
    $.each(data, function(index, item) {
      $province.append("<option value='" + item.id + "'>" + item.name + "</option>");
    });
  });

  // 监听省份选项列表的改变事件
  $("#province").change(function() {
    var provinceId = $(this).val();
    if (provinceId) {
      // 请求城市数据
      $.getJSON("data/cities.json", { province_id: provinceId }, function(data) {
        // 填充数据到城市选项列表中
        var $city = $("#city");
        $city.empty().append("<option value=''>请选择城市</option>");
        $.each(data, function(index, item) {
          $city.append("<option value='" + item.id + "'>" + item.name + "</option>");
        });
      });
    } else {
      // 清空城市选项列表和区域选项列表
      $("#city").empty().append("<option value=''>请选择城市</option>");
      $("#area").empty().append("<option value=''>请选择区域</option>");
    }
  });

  // 监听城市选项列表的改变事件
  $("#city").change(function() {
    var cityId = $(this).val();
    if (cityId) {
      // 请求区域数据
      $.getJSON("data/areas.json", { city_id: cityId }, function(data) {
        // 填充数据到区域选项列表中
        var $area = $("#area");
        $area.empty().append("<option value=''>请选择区域</option>");
        $.each(data, function(index, item) {
          $area.append("<option value='" + item.id + "'>" + item.name + "</option>");
        });
      });
    } else {
      $("#area").empty().append("<option value=''>请选择区域</option>");
    }
  });
});

数据(省份、城市、区域)的格式如下:

{
  "provinces": [
    { "id": 110000, "name": "北京市" },
    { "id": 120000, "name": "天津市" },
    ...
  ],
  "cities": [
    { "id": 110100, "name": "北京市", "province_id": 110000 },
    { "id": 110200, "name": "县", "province_id": 110000 },
    ...
  ],
  "areas": [
    { "id": 110101, "name": "东城区", "city_id": 110100 },
    { "id": 110102, "name": "西城区", "city_id": 110100 },
    ...
  ]
}

示例二:基于动态JSON数据

前端代码:

$(document).ready(function() {
  // 请求省份数据
  $.ajax({
    type: "GET",
    url: "url/to/provinces",
    dataType: "json",
    success: function(data) {
      // 将数据填充到省份选项列表中
      var $province = $("#province");
      $.each(data, function(index, item) {
        $province.append("<option value='" + item.id + "'>" + item.name + "</option>");
      });
    }
  });

  // 监听省份选项列表的改变事件
  $("#province").change(function() {
    var provinceId = $(this).val();
    if (provinceId) {
      // 请求城市数据
      $.ajax({
        type: "GET",
        url: "url/to/cities",
        data: { province_id: provinceId },
        dataType: "json",
        success: function(data) {
          // 填充数据到城市选项列表中
          var $city = $("#city");
          $city.empty().append("<option value=''>请选择城市</option>");
          $.each(data, function(index, item) {
            $city.append("<option value='" + item.id + "'>" + item.name + "</option>");
          });
        }
      });
    } else {
      // 清空城市选项列表和区域选项列表
      $("#city").empty().append("<option value=''>请选择城市</option>");
      $("#area").empty().append("<option value=''>请选择区域</option>");
    }
  });

  // 监听城市选项列表的改变事件
  $("#city").change(function() {
    var cityId = $(this).val();
    if (cityId) {
      // 请求区域数据
      $.ajax({
        type: "GET",
        url: "url/to/areas",
        data: { city_id: cityId },
        dataType: "json",
        success: function(data) {
          // 填充数据到区域选项列表中
          var $area = $("#area");
          $area.empty().append("<option value=''>请选择区域</option>");
          $.each(data, function(index, item) {
            $area.append("<option value='" + item.id + "'>" + item.name + "</option>");
          });
        }
      });
    } else {
      $("#area").empty().append("<option value=''>请选择区域</option>");
    }
  });
});

后端代码(以Laravel为例):

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Province;
use App\Models\City;
use App\Models\Area;

class AreaController extends Controller
{
    /**
     * 获取省份数据
     *
     * @return \Illuminate\Http\Response
     */
    public function provinces()
    {
        return Province::all()->toJson();
    }

    /**
     * 获取城市数据
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function cities(Request $request)
    {
        $provinceId = $request->input('province_id');
        $cities = City::where('province_id', $provinceId)->get();
        return $cities->toJson();
    }

    /**
     * 获取区域数据
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function areas(Request $request)
    {
        $cityId = $request->input('city_id');
        $areas = Area::where('city_id', $cityId)->get();
        return $areas->toJson();
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何利用Ajax实现地区三级联动详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 如何读取URL中带有&符号的哈希值

    要读取 URL 中带有&符号的哈希值,需要使用JavaScript中的location对象及其相关方法。具体步骤如下: 1. 获取哈希值 首先,可以使用window.location.hash属性来获取当前URL的哈希值,该属性返回的是字符串类型。例如: let hash = window.location.hash; console.log(has…

    jquery 2023年5月12日
    00
  • jQWidgets jqxScheduler disabled 属性

    jQWidgets是一套功能强大的JavaScript UI框架,其中包含了一个jqxScheduler组件,用于创建日程表和日志记录。 jqxScheduler组件可以在Web页面中呈现日程安排、时间表和日历功能,可以更方便、快捷地管理时间和任务。 jqxScheduler组件中有一个disabled属性,可以用来禁用或启用组件。disabled属性可以接…

    jquery 2023年5月11日
    00
  • jquery如何获取复选框的值

    获取复选框的值是 JQuery 中的常见操作之一。下面简单讲解一下如何使用 JQuery 来获取复选框的值。 1. 获取单个复选框的值 要获取单个复选框的值,首先需要给复选框设置一个 id。然后使用 JQuery 的 val() 方法来获取该复选框的状态,即选中(checked)还是未选中(unchecked)。 示例代码如下: <!DOCTYPE h…

    jquery 2023年5月28日
    00
  • jQWidgets jqxKanban getItems()方法

    jQWidgets jqxKanban getItems() 方法详解 jQWidgets jqxKanban 是一种看板控件,用于在 Web 应用程序中创建看板。getItems() 方法是 jqxKanban 控件的一个方法,用于获取看板中所有的卡片信息。本文将详细讲解 getItems() 方法的使用方法,并提供两个示例说明。 方法 getItems(…

    jquery 2023年5月10日
    00
  • JQuery map()方法

    JQuery map()方法 JQuery的map()方法用于将一个数组中的每个元素传递给一个函数,然后返回一个新的数组,该数组包含函数返回值。本文将详细介绍map()方法的语法和用法,并提供两个示例。 语法 以下是map()方法基本语法: $.map(array, callback); 在这个语法中,array是要处理的数组;callback是一个函数,用…

    jquery 2023年5月9日
    00
  • jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配

    jQuery 可以根据属性、内容或表单元素的特定属性来获取元素对象,下面详细讲解如何进行选择器的匹配。 根据属性值进行匹配 我们可以使用属性选择器来获取指定属性值的元素。例如,要获取所有具有“data-type=example”的元素,可以使用以下 jQuery 选择器: $("[data-type=’example’]") 注意属性值要…

    jquery 2023年5月28日
    00
  • JQueryMiniUI按照时间进行查询的实现方法

    需求描述: JQueryMiniUI是一个非常流行的开源UI组件库,其中包括了数据表格、弹窗、树形结构等常见的UI组件。某公司要求在使用JQueryMiniUI的数据表格组件时,实现按照时间进行查询的功能。 攻略步骤: 确定查询时间范围:首先需要确定用户需要查询的时间范围,包括起始时间和结束时间。可以通过日期选择器等方式来实现用户选择时间范围的功能。 构造查…

    jquery 2023年5月28日
    00
  • 如何在jQuery中读取、写入和删除cookies

    要在jQuery中读取、写入和删除cookies,可以使用$.cookie()方法。下面是一个完整攻略,包括两个示例说明。 步骤1:引入jQuery Cookie插件 首先,我们需要引入jQuery Cookie插件。我们可以从官方网站下载这个插件,或者使用CDN链接。下面是示例代码: <!DOCTYPE html> <html> &…

    jquery 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部