zoukankan      html  css  js  c++  java
  • ajax

    刚开始学习ajax,参考的是W3school上的教程。不过期间还是遇到了一些问题或疑惑之类的东西,经过努力算是完整的把实例运行了一遍,所以做个笔记吧。

    以下实例代码均可在w3school找到。

    实例一;AJAX  与ASP/PHP 请求实例

    1)按照w3school教程,创建html和js,同时创建后端程序,如php.这一步保证代码无误

    2)以上程序都是在appach/htdocs目录下创建的,所以都已经在本地服务器上了。这里我把appach服务器打开。

    3)当时我是用webstrom打开chrom运行的html,页面打开之后在输入框开始输入a-z,可是页面响应的结果却是代码,

     0) { $hint=""; for($i=0; $i

      到这里出现这样的结果,我自然是不懂了,没办法就接着尝试。

      3-1)这时我就关掉了appach服务器,从webstrom下打开chrom运行html,发现输入时无任何响应。这样应该也是合理的,毕竟没有模拟客户端的请求响应过程。

      3-2)这次不在webstrom下打开chrom来运行html,而是在chrom下输入(localhost/...)来从本地服务器请求html,所以这里appach是打开的。然后页面打开后输入

        这次响应结果正常。这样才是正常的模拟了客户端与服务器的请求响应过程。

    请在下面的输入框中键入字母(A - Z):
    
    姓氏:v
    建议:Violet , Vicky

    4)open()中url参数需要根据服务器程序php所在位置的路径来写,这里使用相对路径来写。如(../php/gethint.php)。

    实例二,AJAX 数据库实例

    这个实例由于涉及到php、mysql,所以还是花了不少时间搞清楚他们之间的关系。

    使用的web服务器软件是集成了apache/mysql的XAMPP,避免了手动配置php/mysql.

    php之前没学过,借助w3school基本可以看懂程序,验证过程中问题主要出在了数据库上。下面记录以下验证过程。

    1).下载并安装了mysql的客户端,配置了环境变量。这样客户端配置应该是正常了。打开xampp的mysql服务器,通过命令行操作发现mysql的确安装配置成功了。2)然后就用mysql的语句开始创建数据库-->创建表格-->插入数据。无奈对数据库语句不熟悉,老是蹦出syntax错误,所以放弃了以这样的方式创建数据库。

    3)然后通过xampp-mysql--admin中的phpmyadmin可视化创建数据库。

     基本思路依旧是,创建数据库-->创建表格-->插入数据。

    4)上面这些完成之后,基本上就可以开始运行程序了。不过还是出现了一些问题。

       4-1)由于不想设置密码,所以就这样写了,$con = mysql_connect('localhost'),不过这样虽然没报错,可是在查找数据库表时找不到。

               无奈就在phpmyadmin中设置了root@localhost对应密码为“root”.

    $con = mysql_connect('localhost','root','root')
    

       4-2)接下来重新运行html,发现只能返回表格头部,而php从数据库中获取的数据却无法返回,由于对php并不熟悉,所以还是折腾了不少。

            后来通过打log.发现了原因。然后我也是醉了。

    --------------html---------------
    <select name="users" onchange="showUser(this.value)"> <option value="1">peter</option> <option value="2">paul</option> <option value="3">su</option> <option value="4">san</option> </select>
    -----------------------------------------

    --------------php------------------------
    $sql="SELECT * FROM user WHERE firstname = '".$q."'";
    print_r($sql);
    --------------------------------------------------------

    本意要通过this.value把选中的下拉菜单的值传给php,然后php用它作为firstname来检索表格。数据库表格中添加了四条数据,firstname分别是peter/paul/su/san.

    可是通过log,发现js传递过去的参数q跟数据库中firstname是对不上的。

    log信息:SELECT * FROM user WHERE firstname = '3'
    

     然后发现是html中value中设置错误。所以就改成下面这样

     <select name="users" onchange="showUser(this.value)">
            <option value="peter">peter</option>
            <option value="paul">paul</option>
            <option value="su">su</option>
            <option value="san">san</option>
        </select>
    

     然后一切都正常了。

    输出结果如下

    完整的代码如下

    html+js

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <form>
        Select a User:
        <select name="users" onchange="showUser(this.value)">
            <option value="peter">peter</option>
            <option value="paul">paul</option>
            <option value="su">su</option>
            <option value="san">san</option>
        </select>
    </form>
    <br/>
    <div id="txtHint"><b>User info will be listed here.</b></div>
    
    <script>
        function showUser(str){
            var xmlhttp;
            if(str==''){
                document.getElementById('txtHint').innerHTML='';
                return;
            }
            if(window.XMLHttpRequest){
                xmlhttp=new XMLHttpRequest();
            }else{
                xmlhttp=new ActiveXObject('MICROSOFT.XMLHTTP');
            }
    
            xmlhttp.onreadystatechange= function() {
                if((xmlhttp.readyState==4)&&(xmlhttp.status==200)){
                    document.getElementById('txtHint').innerHTML=xmlhttp.responseText;
                }
            };
            xmlhttp.open('get','../php/getcustomer.php?q='+str,true);
            xmlhttp.send();
        }
    </script>
    </body>
    </html>
    

     php

    <?php
    $q=$_GET["q"];
    
    $con = mysql_connect('localhost','root','root')  or die("数据错误!");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }
    
    mysql_select_db("ajax_demo", $con) or die('错误');
    
    $sql="SELECT * FROM user WHERE firstname = '".$q."'";
    print_r($sql);
    $result = mysql_query($sql);
    
    echo "<table border='1'>
    <tr>
    <th>id</th>
    <th>firstname</th>
    <th>lastname</th>
    <th>age</th>
    
    </tr>";
    while($row = mysql_fetch_array($result))
    {
        echo "<tr>";
        echo "<td>" . $row['id'] . "</td>";
        echo "<td>" . $row['firstname'] . "</td>";
        echo "<td>" . $row['lastname'] . "</td>";
        echo "<td>" . $row['age'] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    mysql_close($con);
    ?>
    

     数据库是通过phpmyadmin创建的

    前端通过ajax和php、数据库的通信这里基本上做了演示。

    后面会重点去学习ajax自身的一些东西,如跨域等。

  • 相关阅读:
    F12
    InnerClass.java
    Java8
    对象下—练习4
    对象下—练习3
    模板方法
    对象下—练习2
    对象下—举例二、三
    【J-Link】J-Link不支持(版本太低)
    【Android】安装插件 + 改变文字大小、颜色 + 隐藏代码区块的直线
  • 原文地址:https://www.cnblogs.com/web-coding/p/4745762.html
Copyright © 2011-2022 走看看