定义:Ajax(Asynchronous JavaScript and XML)即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术,它允许在不刷新整个页面的情况下,与服务器进行数据交互,从而提升用户体验。
工作原理:通过JavaScript的XMLHttpRequest对象或Fetch API,向服务器发送异步请求,获取数据后在客户端进行解析和处理,最后更新页面的部分内容。
二、使用原生JavaScript实现Ajax读取数据库数据
1、前端代码:
创建XMLHttpRequest对象,设置请求方法和URL,以及处理响应的回调函数。
在回调函数中,根据readyState和status判断请求是否成功,如果成功则解析响应文本并更新页面内容。
2、示例代码:
<!DOCTYPE html> <html> <head> <title>Ajax读取数据库数据</title> </head> <body> <input type="text" id="searchBox" placeholder="请输入搜索内容"> <button onclick="search()">搜索</button> <div id="result"></div> <script> function search() { var xhr = new XMLHttpRequest(); var searchValue = document.getElementById('searchBox').value; xhr.open("GET", "server-side-script.php?q=" + searchValue, true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { document.getElementById('result').innerHTML = xhr.responseText; } }; xhr.send(); } </script> </body> </html>
3、后端代码(PHP示例):
连接数据库,执行查询语句,获取结果集。
将结果集转换为JSON格式或其他适合前端处理的格式,并输出。
4、示例代码:
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT FROM users WHERE username LIKE '%" . $_GET['q'] . "%'"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo json_encode($row); } } else { echo "0 results"; } $conn->close(); ?>
三、使用jQuery实现Ajax读取数据库数据
1、前端代码:
使用jQuery的$.ajax()
方法发送请求,设置请求类型、URL、数据类型等参数,以及成功和错误回调函数。
在成功回调函数中,处理服务器返回的数据并更新页面内容。
2、示例代码:
<!DOCTYPE html> <html> <head> <title>Ajax读取数据库数据</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="text" id="searchBox" placeholder="请输入搜索内容"> <button onclick="search()">搜索</button> <div id="result"></div> <script> function search() { var searchValue = $('#searchBox').val(); $.ajax({ url: 'server-side-script.php', type: 'GET', data: {q: searchValue}, dataType: 'json', success: function(data) { $('#result').html(data); }, error: function(xhr, status, error) { console.error('Error: ' + error); } }); } </script> </body> </html>
3、后端代码:同上(PHP示例)。
1、问题一:如何在Ajax请求中发送POST数据?
解答:在原生JavaScript中,可以使用xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
设置请求头,然后通过xhr.send("param1=" + value1 + "¶m2=" + value2)
发送POST数据,在jQuery中,可以直接在$.ajax()
方法中设置type: 'POST'
和data: {param1: value1, param2: value2}
来发送POST数据。
2、问题二:如何处理Ajax请求中的跨域问题?
解答:可以通过设置CORS(跨来源资源共享)策略来解决跨域问题,在服务器端设置允许跨域访问的响应头,例如在PHP中可以添加header('Access-Control-Allow-Origin: ');
,在前端也可以使用JSONP等技术来绕过跨域限制(但JSONP只支持GET请求)。