AJAX返回值

AJAX返回值的使用场景
AJAX返回值常用于不同场景:字符串如简短状态信息或JSON格式数据,适用于返回数组或对象;HTML代码适合大块数据更新,减少DOM操作;而XML则在处理大量格式化数据时发挥作用,客户端通过responseXML解析。

AJAX返回值应用场景

1. 字符串:

  • 短字符串:
    应用场景: 一般返回较短,具有标志的字符串,如,0/1, succ/fail, 已注册,未注册等.
    function chk() {
        var xhr = new XMLHttpRequest();
        var uri = '01.php?username=' + document.getElementsByTagName('input')[0].value;
        xhr.open('get',uri,true);

        xhr.onreadystatechange = function () {
            if(xhr.readyState == 4) {
                if(xhr.responseText == 1) {
                    alert('用户名已被占用');
                } else if(xhr.responseText == 0) {
                    alert('用户名可用');
                } else {
                    alert('异常错误');
                }
            }
        };

        xhr.send(null);
    }
$username = $_GET['username'];
$arr = array('zhangsan','lisi','wangwu');
echo in_array($username,$arr)?1:0;
  • Json格式字符串:
    应用场景: 返回数组或对象等格式化数据
<h1>商品编辑</h1>
 43         商品id:<input type="text" name="goods_id" onblur="mod();" /><br />
 44         商品名称:<input type="text" name="goods_name" /><br />
 45         商品价格:<input type="text" name="shop_price" /><br />
 46         商品库存:<input type="text" name="goods_number" /><br />
 47         <input type="submit" value="修改" />
 9 function mod(){
 10  var gid = document.getElementsByName('goods_id')[0].value;
 11  var patt = /^\d+$/;
 12  if(!patt.test(gid)){
 13   alert('请输入正确的id');
 14   return false;
 15 }
 16  var xhr = new XMLHttpRequest();
 17  var uri = '05.php?goods_id=' +gid;
 18  xhr.open('get',uri,true);
 19  xhr.onreadystatechange = function(){
 20         if(xhr.readyState == 4){
 21                 var rs = eval('('+xhr.responseText+')');
 22         if(rs.errno != 0){
 23                 alert(rs.errstr);
 24                 return false;
 25         }
 26         document.getElementsByName('goods_name')[0].value = rs.name;
 27         document.getElementsByName('shop_price')[0].value=rs.price;
 28         document.getElementsByName('goods_number')[0].value=rs.number;
 29 }
 30 };
 31  xhr.send(null);
 32
 33 }

  1 <?php
  2 $goods_id = $_GET['goods_id'] + 0;
  3 if(!is_int($goods_id)){
  4         $info = array('errno'=>1,'errstr'=>'id有误');
  5         echo json_encode($info);
  6         exit;
  7 }
  8 $conn = mysql_connect($host,$user,$pwd);
  9 $sql = 'use **';
 10 mysql_query($sql,$conn);
 11
 12 $sql = 'set names utf8';
 13 mysql_query($sql,$conn);
 14
 15 $sql = 'select name,price,number from person where id ='.$goods_id;
 16 $rs = mysql_query($sql,$conn);
 17
 18 $goods = mysql_fetch_assoc($rs);
 19
 20 //var_dump($goods);
 21
 22 if(empty($goods)){
 23         $info = array('errno'=>2,'errstr'=>'无此商品');
 24         echo json_encode($info);
 25 }else{
 26         $info = $goods;
 27         $info['errno'] = 0;
 28         $info['errstr'] = '正确';
 29         echo json_encode($info);
 30         exit;
 31 }
  • javascript object notation, javascript原生对象格式
  • Html代码: 一整段html代码
    应用场景: 当页面上有大块的数据变化时, 用数组要牵涉到大量的DOM操作,
    这时,可以用PHP+Html,预先生成需要的html代码, 然后以字符串形式返回.
    再innerHTML到页面中去.

  9 function top3(type){
 10         var xhr = new XMLHttpRequest();
 11         var uri = '04.php?type='+type;
 12         xhr.open('get',uri,true);
 13
 14         xhr.onreadystatechange = function(){
 15         if(xhr.readyState == 4){
 16         var rs = xhr.responseText;
 17         document.getElementById('show').innerHTML = rs;
 18 }
 19
 20 };
 21         xhr.send(null);
 22 }
 23
 24
 25 </script>
 26
 27 <style type="text/css">
 28 </style>
 29 </head>
 30     <body>
 31         <input type="button" value="搞笑三人组" onclick="top3('is_fun');">
 32         <input type="button" value="杀猪三人组" onclick="top3('is_pig');">
 33         <input type="button" value="肌肉三人组" onclick="top3('is_ma');">
 34
 35         <div id="show">
 36         </div>
 37     </body>
 38 </html>
  1 <?php
  2 $type = $_GET['type'];
  3 if(!in_array($type,array('is_pig','is_ma','is_fun'))){
  4         echo 'error';
  5         exit;
  6 }
  7
  8 $dbh = new PDO("$dbms:host=$host;dbname=$dbname",$user,$pwd);
  9 $rs = $dbh->query("select id,name from person where $type = 1 limit 3");
 10 $list = array();
 11 while($row = $rs -> fetch(PDO::FETCH_ASSOC)){
 12 $list[] = $row;
 13 }
 14 //var_dump($list);
 15 ?>
 16
 17 <table border="1">
 18         <tr><td>id</td><td>name</td></tr>
 19         <?php foreach($list as $v) { ?>
 20         <tr><td><?php echo $v['id'] ?></td><td><?php echo $v['name'] ?></td></tr>
 21         <?php }?>
 22
 23
 24
 25
 26 </table>
 27
  • Jsonp:

    2. XML
    应用场景:返回大量的格式化数据时
    如果返回XML来使用

  • 在客户端用 responseXML

  • 服务器端的返回明确指定返回类型XML
Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下,与服务器进行异步通信并更新部分网页的技术,其返回值是服务器处理请求后返回给客户端的数据,在很多应用场景中会用到,下面为你介绍获取及处理方法: ### 介绍 Ajax返回值是服务器根据客户端发送的请求进行处理后返回的数据,其数据类型多种多样,常见的有字符串、JSON对象、XML文档等。返回值的类型和格式取决于服务器端的设置和处理逻辑。 ### 获取方法 在很多应用场景中,会遇到通过ajax来获取值,一般可直接在ajax的回调函数里边直接进行处理,也有将ajax返回值传递出来的方法,以下介绍3种常见获取方法: - **使用回调函数**:这是最常见的方法,将处理返回值的逻辑放在回调函数中。当ajax请求完成后,服务器返回的数据会作为参数传递给回调函数进行处理。以下是使用jQuery实现的示例代码: ```javascript $.ajax({ url: 'your_url', method: 'GET', success: function(response) { // 处理返回值 console.log(response); }, error: function(error) { console.error('请求出错:', error); } }); ``` - **使用Promise对象**:Promise对象可以更好地处理异步操作,避免回调地狱。可以将ajax请求封装在一个Promise中,然后使用`then`方法处理返回值。示例代码如下: ```javascript function makeAjaxRequest() { return new Promise((resolve, reject) => { $.ajax({ url: 'your_url', method: 'GET', success: function(response) { resolve(response); }, error: function(error) { reject(error); } }); }); } makeAjaxRequest() .then(response => { // 处理返回值 console.log(response); }) .catch(error => { console.error('请求出错:', error); }); ``` - **使用async/await**:这是ES2017引入的异步编程语法糖,结合Promise使用可以让异步代码看起来更像同步代码。示例代码如下: ```javascript async function getData() { try { const response = await $.ajax({ url: 'your_url', method: 'GET' }); // 处理返回值 console.log(response); } catch (error) { console.error('请求出错:', error); } } getData(); ``` ### 处理方法 - **数据解析**:如果返回值是JSON格式,需要将其解析为JavaScript对象。可以使用`JSON.parse()`方法进行解析。示例代码如下: ```javascript $.ajax({ url: 'your_url', method: 'GET', success: function(response) { const data = JSON.parse(response); // 处理解析后的数据 console.log(data); }, error: function(error) { console.error('请求出错:', error); } }); ``` - **更新DOM**:根据返回值更新网页的部分内容。例如,将返回的文本显示在页面上: ```javascript $.ajax({ url: 'your_url', method: 'GET', success: function(response) { $('#result').text(response); }, error: function(error) { console.error('请求出错:', error); } }); ``` - **条件判断**:根据返回值的不同进行不同的处理。例如,如果返回值表示操作成功,则显示成功消息;如果表示失败,则显示错误消息: ```javascript $.ajax({ url: 'your_url', method: 'GET', success: function(response) { if (response.status === 'success') { $('#message').text('操作成功'); } else { $('#message').text('操作失败'); } }, error: function(error) { console.error('请求出错:', error); } }); ``` ### 注意事项 在django中使用ajax请求,当使用post方法的时候,必须要添加form标签里的csrfmiddlewaretoken的值,否则会出现403的结果,会直接被中间件进行forbidden连接[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值