zoukankan      html  css  js  c++  java
  • php传参方式1--ajax

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
    AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。
    AJAX 是一种用于创建快速动态网页的技术。
    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
    传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。异步请求(XMLHttpRequest对象),局部刷新(本质是js dom)
    ajax的用途还有填写表单时候自动判断用户名是否重复,比如你写博客写到一半突然电脑重启了,可以恢复你写了一半的内容。
     
    get用于获取数据,有字数限制,请求提包括在url中,post无限制,用于修改服务器的内容。
    get是安全的请求,需要保证不修改信息。

    1、ajax一般用于当前页面,不实现页面跳转 

    2、ajax端:怎样异步得监听服务器端的状态呢?通过onreadystatechange监听readystate属性

    request.onreadystatechange = function() {

    if (request.readyState===4) {
    • 0:请求未初始化(还没有调用 open())。
    • 1:请求已经建立,但是还没有发送(还没有调用 send())。
    • 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
    • 3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
    • 4:响应已完成;您可以获取并使用服务器的响应了。

    所以一般都是判断等于4之后进行相应的操作。

    但注意这个和request的status是不一样的

    比如readystate=4但是status=404表示响应完成但是响应的内容是没有找到文件

    所以一般做法是==200的时候返回内容,其他就显示发声错误即可。

    注意在post请求中要设置url 成encode,及url解码,否则不能正确给出结果

    request.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    但是url解码会有一个问题,由于进行urlencoded的时候加号会自动解码成空格,&会被解码成变量连接符,所以如果出现这些字符必须要进行转码

    (在做canvas上传图片的url的时候遇到了这个问题)

    Pic = Pic.replace(/+/g, "%2B");
    Pic = Pic.replace(/&/g, "%26");

    3、服务器通过echo来返回给传递ajax的界面。
    (提示:zendstudio内置的浏览器对于ajax的页面总是会显示上一次的页面,所以改成在外置浏览器里运行
      preference-general-web browser里面设置。)
    如果只返回一行简单的,可以不用jason,jason可以更方便返回不同键值的数据。
     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     5 <title>Demo</title>
     6 <style>
     7 body, input, select, button, h1 {
     8     font-size: 28px;
     9     line-height:1.7;
    10 }
    11 </style>    
    12 </head>
    13 
    14 <body>
    15 
    16 <h1>员工查询</h1>
    17 
    18 <label>请输入员工编号:</label>
    19 <input type="text" id="keyword" />
    20 <button id="search">查询</button>
    21 <p id="searchResult"></p>
    22 
    23 <h1>员工新建</h1>
    24 <label>请输入员工姓名:</label>
    25 <input type="text" id="staffName" /><br>
    26 <label>请输入员工编号:</label>
    27 <input type="text" id="staffNumber" /><br>
    28 <label>请选择员工性别:</label>
    29 <select id="staffSex">
    30 <option></option>
    31 <option></option>
    32 </select><br>
    33 <label>请输入员工职位:</label>
    34 <input type="text" id="staffJob" /><br>
    35 <button id="save">保存</button>
    36 <p id="createResult"></p>
    37 
    38 <script>
    39 document.getElementById("search").onclick = function() { 
    40     var request = new XMLHttpRequest();
    41     request.open("GET", "serverjson.php?number=" + document.getElementById("keyword").value);
    42     request.send();
    43     request.onreadystatechange = function() {
    44         if (request.readyState===4) {
    45             if (request.status===200) { //不同的status在百度可以找到
    46                 var data = JSON.parse(request.responseText);//json.parse!
    47                 if (data.success) { //注意seccess也返回jason的一个键值
    48                     document.getElementById("searchResult").innerHTML = data.msg;//json中的msg键值
    49                 } else {
    50                     document.getElementById("searchResult").innerHTML = "出现错误:" + data.msg;
    51                 }
    52             } else {
    53 alert("发生错误:" + request.status); 54 } 55 } 56 } 57 } 58 59 document.getElementById("save").onclick = function() { 60 var request = new XMLHttpRequest(); 61 request.open("POST", "serverjson.php"); 62 var data = "name=" + document.getElementById("staffName").value 63 + "&number=" + document.getElementById("staffNumber").value 64 + "&sex=" + document.getElementById("staffSex").value 65 + "&job=" + document.getElementById("staffJob").value; 66 request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 67 request.send(data); 68 request.onreadystatechange = function() { 69 if (request.readyState===4) { 70 if (request.status===200) { 71 var data = JSON.parse(request.responseText); 72 if (data.success) { 73 document.getElementById("createResult").innerHTML = data.msg; 74 } else { 75 document.getElementById("createResult").innerHTML = "出现错误:" + data.msg; 76 } 77 } else { 78 alert("发生错误:" + request.status); 79 } 80 } 81 } 82 } 83 </script> 84 </body> 85 </html>

     3、响应server代码serverjason.php

    <?php
    //设置页面内容是html编码格式是utf-8
    header("Content-Type: text/plain;charset=utf-8"); 
    //header("Content-Type: application/json;charset=utf-8"); 
    //header("Content-Type: text/xml;charset=utf-8"); 
    //header("Content-Type: text/html;charset=utf-8"); 
    //header("Content-Type: application/javascript;charset=utf-8"); 
    
    //定义一个多维数组,包含员工的信息,每条员工信息为一个数组
    $staff = array
        (
            array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),
            array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),
            array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理")
        );
    
    //判断如果是get请求,则进行搜索;如果是POST请求,则进行新建
    //$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字
    //$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法
    if ($_SERVER["REQUEST_METHOD"] == "GET") {
        search();
    } elseif ($_SERVER["REQUEST_METHOD"] == "POST"){
        create();
    }
    
    //通过员工编号搜索员工
    function search(){
        //检查是否有员工编号的参数
        //isset检测变量是否设置;empty判断值为否为空
        //超全局变量 $_GET 和 $_POST 用于收集表单数据
        if (!isset($_GET["number"]) || empty($_GET["number"])) {
            echo '{"success":false,"msg":"参数错误"}';//jason格式
            return;
        }
        //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
        //global 关键词用于访问函数内的全局变量
        global $staff;
        //获取number参数
        $number = $_GET["number"];
        $result = '{"success":false,"msg":"没有找到员工。"}';
        
        //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果
        foreach ($staff as $value) {
            if ($value["number"] == $number) {
                $result = '{"success":true,"msg":"找到员工:员工编号:' . $value["number"] . 
                                ',员工姓名:' . $value["name"] . 
                                ',员工性别:' . $value["sex"] . 
                                ',员工职位:' . $value["job"] . '"}';//jason格式
                break;
            }
        }
        echo $result;
    }
    
    //创建员工
    function create(){
        //判断信息是否填写完全
        if (!isset($_POST["name"]) || empty($_POST["name"])
            || !isset($_POST["number"]) || empty($_POST["number"])
            || !isset($_POST["sex"]) || empty($_POST["sex"])
            || !isset($_POST["job"]) || empty($_POST["job"])) {
            echo '{"success":false,"msg":"参数错误,员工信息填写不全"}';
            return;
        }
        //TODO: 获取POST表单数据并保存到数据库
        
        //提示保存成功
        echo '{"success":true,"msg":"员工:' . $_POST["name"] . ' 信息保存成功!"}';
    }
    
    ?>

    4、下面是jQuery的形式

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Demo</title>
    <style>
    body, input, select, button, h1 {
        font-size: 28px;
        line-height:1.7;
    }
    </style>    
    </head>
    
    <body>
    
    <h1>员工查询</h1>
    
    <label>请输入员工编号:</label>
    <input type="text" id="keyword" />
    <button id="search">查询</button>
    <p id="searchResult"></p>
    
    <h1>员工新建</h1>
    <label>请输入员工姓名:</label>
    <input type="text" id="staffName" /><br>
    <label>请输入员工编号:</label>
    <input type="text" id="staffNumber" /><br>
    <label>请选择员工性别:</label>
    <select id="staffSex">
    <option></option>
    <option></option>
    </select><br>
    <label>请输入员工职位:</label>
    <input type="text" id="staffJob" /><br>
    <button id="save">保存</button>
    <p id="createResult"></p>
    
    <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>
    <script>
    $(document).ready(function(){ 
        $("#search").click(function(){ 
            $.ajax({ 
                type: "GET",     
                url: "serverjson2.php?number=" + $("#keyword").val(),
                dataType: "json",
                success: function(data) {
                    if (data.success) { 
                        $("#searchResult").html(data.msg);
                    } else {
                        $("#searchResult").html("出现错误:" + data.msg);
                    }  
                },
                error: function(jqXHR){     
                   alert("发生错误:" + jqXHR.status);  
                },     
            });
        });
        
        $("#save").click(function(){ 
            $.ajax({ 
                type: "POST",     
                url: "serverjson.php",
                data: {
                    name: $("#staffName").val(), 
                    number: $("#staffNumber").val(), 
                    sex: $("#staffSex").val(), 
                    job: $("#staffJob").val()
                },
                dataType: "json",
                success: function(data){
                    if (data.success) { 
                        $("#createResult").html(data.msg);
                    } else {
                        $("#createResult").html("出现错误:" + data.msg);
                    }  
                },
                error: function(jqXHR){     
                   alert("发生错误:" + jqXHR.status);  
                },     
            });
        });
    });
    </script>
    </body>
    </html>
    <?php
    //设置页面内容是html编码格式是utf-8
    //header("Content-Type: text/plain;charset=utf-8"); 
    header('Access-Control-Allow-Origin:*');
    header('Access-Control-Allow-Methods:POST,GET');
    header('Access-Control-Allow-Credentials:true'); 
    header("Content-Type: application/json;charset=utf-8"); 
    //header("Content-Type: text/xml;charset=utf-8"); 
    //header("Content-Type: text/html;charset=utf-8"); 
    //header("Content-Type: application/javascript;charset=utf-8"); 
    
    //定义一个多维数组,包含员工的信息,每条员工信息为一个数组
    $staff = array
        (
            array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),
            array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),
            array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理")
        );
    
    //判断如果是get请求,则进行搜索;如果是POST请求,则进行新建
    //$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字
    //$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法
    if ($_SERVER["REQUEST_METHOD"] == "GET") {
        search();
    } elseif ($_SERVER["REQUEST_METHOD"] == "POST"){
        create();
    }
    
    //通过员工编号搜索员工
    function search(){
        //检查是否有员工编号的参数
        //isset检测变量是否设置;empty判断值为否为空
        //超全局变量 $_GET 和 $_POST 用于收集表单数据
        if (!isset($_GET["number"]) || empty($_GET["number"])) {
            echo '{"success":false,"msg":"参数错误"}';
            return;
        }
        //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
        //global 关键词用于访问函数内的全局变量
        global $staff;
        //获取number参数
        $number = $_GET["number"];
        $result = '{"success":false,"msg":"没有找到员工。"}';
        
        //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果
        foreach ($staff as $value) {
            if ($value["number"] == $number) {
                $result = '{"success":true,"msg":"找到员工:员工编号:' . $value["number"] . 
                                ',员工姓名:' . $value["name"] . 
                                ',员工性别:' . $value["sex"] . 
                                ',员工职位:' . $value["job"] . '"}';
                break;
            }
        }
        echo $result;
    }
    
    //创建员工
    function create(){
        //判断信息是否填写完全
        if (!isset($_POST["name"]) || empty($_POST["name"])
            || !isset($_POST["number"]) || empty($_POST["number"])
            || !isset($_POST["sex"]) || empty($_POST["sex"])
            || !isset($_POST["job"]) || empty($_POST["job"])) {
            echo '{"success":false,"msg":"参数错误,员工信息填写不全"}';
            return;
        }
        //TODO: 获取POST表单数据并保存到数据库
        
        //提示保存成功
        echo '{"success":true,"msg":"员工:' . $_POST["name"] . ' 信息保存成功!"}';
    }
    
    ?>
  • 相关阅读:
    configure: error: invalid variable name: `'
    [bzoj2002][Hnoi2010]Bounce弹飞绵羊——分块
    [bzoj2049][Sdoi2008]Cave 洞穴勘测——lct
    [bzoj4765]普通计算姬——分块
    [bzoj4766]文艺计算姬——完全二分图生成树个数
    [bzoj2243][SDOI2011]染色——树链剖分+线段树
    [bzoj3306]树——树上倍增+dfs序+线段树
    [bzoj1977][BeiJing2010组队]次小生成树 Tree——树上倍增+lca
    [bzoj3697]采药人的路径——点分治
    小蒟蒻的天坑
  • 原文地址:https://www.cnblogs.com/whiteivory/p/4823756.html
Copyright © 2011-2022 走看看