年轻?大有所为!——实战一

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);">菜鸟的我,最近一边学前端,一边在某网站写所遇问题的笔记。恩,现在我先把它们慢慢搬回CSDN吧!</span>

通过同学的了解和自己所查找的资料,我开始了自己对前端的系统学习。我规划了我的学习计划:

1.基本理论知识(http://www.w3cschool.cc/):

W3C标准及规范——HTML、CSS——JavaScript——jQuery、bootstrap——ajax、JSON、XML(前面大致了解了一些,打算以后仔细研究一一下)——node.js(说是服务器上的JavaScript)——php(我想这也是一个合格优秀的前端攻城师必需的吧)

现在我将jQuery看完,打算实用啦,等后面再来贴上我的jQuery实战!

2.实战

理论学习的时候做了很多实例,我大致真正理解到为什么说HTML是内容,CSS是样式、JS是行为的意思。现在终于有了我完整的实战作品,以下是我遇到的问题,将它记录下来:

(1)在线测试网站

我最开始写了一个题库数据库(mdb),用javascript读取ACCESS并显示到HTML中去。我找了很多资料,原来JavaScript很少用来读取数据库,这对数据安全性有很大威胁。不过,我还是了解了一下应该怎么用,并得以实现。

A .在这里仅仅写了ACCESS访问方法:

ACCESS中,ODBC数据源连接文本的格式是:“Driver={数据库驱动程序};Dbq=数据库文件;

// 连接数据库TIKU.mdb,查找表INFO
var rs=null;
var conn=null;
function conDB() {
        conn = new ActiveXObject("ADODB.Connection");
        conn.open("DBQ=D://Web//test//TIKU.mdb;DRIVER={Microsoft Access Driver (*.mdb)};"); 
        rs = new ActiveXObject("ADODB.Recordset"); 
        var sql="select * from INFO"; 
        rs.open(sql, conn);                          
}

// 将取得的数据库数据赋予HTML元素显示当前题目
function showQuestion () {
        if(!rs.EOF) //EOF表示指向最后一条数据
        {
                document.getElementById("q").innerHTML=rs.Fields("QUESTION");
                conn.execute("update INFO set ISFLAG='1'  where QUESTION='" + rs.Fields("QUESTION") + "'");
        } 
        

        rs.moveNext();
                //移动到下一条数据,如一个指针指到下一条数据去,千万不要忘记加这行代码哦~不然就死循环啦
        rs.close(); 
        rs = null; 
        conn.close(); 
        conn = null;
}

题外话: 
暂时讲讲Recordset 对象
ADO Recordset 对象用于容纳一个来自数据库表的记录集。一个 Recordset 对象由记录和列(字段)组成。在 ADO 中,此对象是最重要且最常用于对数据库的数据进行操作的对象。
当首次打开一个 Recordset 时,当前记录指针将指向第一个记录,同时 BOF 和 EOF 属性为 False。如果没有记录,BOF 和 EOF 属性为 True。
具体可查
http://www.w3school.com.cn/ado/ado_ref_recordset.asp

B.XML

网上有人说:

一是JavaScript访问数据库在本地可以正常运行,一旦放到免费个人空间上就没法执行了,主要原因就是操作权限不够,由于只支持静态页面的免费空间多数都作了非常严格的限制,所以无论是用mdb的方式,还是读写纯文本文件的方式都没办法通过,而由页面报出js错误。国外的一些免费空间,直接就禁止mdb这样扩展名的文件上传。

二是用这种方法来读写数据库,只适合做计数器和留言版这样的不需要保密性的工作,毕竟代码全是用javascript写成的,谁都可以看到,然后就可以得到路径把db文件下载下来进行分析,所以没办法用它来保存一些不想让别人知道的东西。


好了,该讲讲XML啦,有关信息来自W3C的XML教程。我大概理解了XML为:

XML 是什么?

指可扩展标记语言(eXtensible Markup Language), 被设计用来传输和存储数据。

为什么用XML?

它简化数据的存储和共享。如果在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。通过 XML,数据能够存储在独立的 XML 文件中。这样就可以专注于使用 HTML/CSS 进行显示和布局,并确保修改底层数据不再需要对 HTML 进行任何的改变。通过使用几行 JavaScript 代码,您就可以读取一个外部 XML 文件,并更新您的网页的数据内容。

怎么用XML?

1)首先理解了XML文档形成树结构,XML 文档必须包含根元素。该元素是所有其他元素的父元素。XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

DOM node tree

2)XML语法规则

所有元素都必须有关闭标签;

XML 标签对大小写敏感;

所有元素都必须彼此正确地嵌套;

XML 文档必须有一个元素是所有其他元素的父元素;

XML 的属性值必须加引号;

避免一些拥有特殊的意义字符,用实体引用来代替;

注释的语法与 HTML 的语法很相似;空格被保留;

一个元素可以包含:

  • 其他元素
  • 文本
  • 属性
  • 或混合以上所有..
3)XML JAVASCRIPT

好了,大致了解了XML,用起来吧。

以下是我写的流程是:

function loadXMLDoc()
{
        // 所有现代浏览器都有内建的 XML 解析器。XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。
        // 1.创建一个 XMLHttpRequest 对象,把 XML 文档解析到 XML DOM 对象中:
        if (window.XMLHttpRequest)
        {        // code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        }
        else
        {        // code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(xmlhttprequest==undefined || xmlhttprequest==null){  
                alert("XMLHttpRequest对象创建失败!!");  
          }else{  
                  xmlhttp=xmlhttprequest;  
          }  

        //2.设置和服务器交互的相应参数
        xmlhttp.open("GET","tiku.xml",false);
        //3.设置向服务器端发送的数据,启动和服务器端的交互
        xmlhttp.send(null);
        xmlDoc=xmlhttp.responseXML;
}
再来仔细说明一下:
open方法有五个参数,分别是:(1)发送请求的类型,主要为Get和Post.该参数必须.(2)要连接的url.该参数必须.(3)第三个参数如果希望使用异步连接,则为true,否则为false.此参数可选,默认为true.(4)如果需要身份验证,则可以指定用户名.此参数可选.(5)如果需要身份验证,则可以指定密码.此参数可选.
open使用方法:open(method,url,asynch);

设置回调函数

回调函数必须在发送请求前设定.我们设定了回调函数后,在随后发送请求后,在得到服务器的正常回应之后,就会调用设定的回调函数.

此处需要注意的是,一般正确的服务器响应会出现在xmlHttp.readyState=4且xmlHttp.status=200时.
对于服务器响应的数据,我们可以根据需要通过xmlHttp.responseText或xmlHttp.responseXML来获取.

发送请求

发送请求使用send方法,若为request-type为get时,可为send(null);若为post,则为send(data).
最后,我在网上找到一个写的蛮好的,记录下来,以后学习:

//类的构建定义,主要职责就是新建XMLHttpRequest对象   
var MyXMLHttpRequest=function(){  
        var xmlhttprequest;  
    if(window.XMLHttpRequest){  
        xmlhttprequest=new XMLHttpRequest();  
        if(xmlhttprequest.overrideMimeType){  
            xmlhttprequest.overrideMimeType("text/xml");  
        }  
    }else if(window.ActiveXObject){  
        var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
        for(var i=0;i<activeName.length;i++){  
            try{  
                xmlhttprequest=new ActiveXObject(activeName[i]);  
                break;  
            }catch(e){  
                         
            }  
        }  
    }  
      
   if(xmlhttprequest == undefined || xmlhttprequest == null){  
        alert("XMLHttpRequest对象创建失败!!");  
   }else{  
        this.xmlhttp=xmlhttprequest;  
    }  
      
   //用户发送请求的方法   
        MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){  
                if(this.xmlhttp!=undefined && this.xmlhttp!=null){  
                method=method.toUpperCase();  
                if(method!="GET" && method!="POST"){  
                              alert("HTTP的请求方法必须为GET或POST!!!");  
                    return;  
                }  
                if(url==null || url==undefined){  
                    alert("HTTP的请求地址必须设置!");  
                    return ;  
                }  
        var tempxmlhttp=this.xmlhttp;  
        //回调函数
        this.xmlhttp.onreadystatechange=function(){  
            if(tempxmlhttp.readyState==4){  
                if(temxmlhttp.status==200){  
                    var responseText=temxmlhttp.responseText;  
                    var responseXML=temxmlhttp.reponseXML;  
                   if(callback==undefined || callback==null){  
                        alert("没有设置处理数据正确返回的方法");  
                        alert("返回的数据:" + responseText);  
                    }else{  
                       callback(responseText,responseXML);  
                    }  
                }else{  
                    if(failback==undefined ||failback==null){  
                        alert("没有设置处理数据返回失败的处理方法!");  
                        alert("HTTP的响应码:" + tempxmlhttp.status + ",响应码的文本信息:" + tempxmlhttp.statusText);  
                    }else{  
                        failback(tempxmlhttp.status,tempxmlhttp.statusText);  
                    }  
                }  
            }  
        }  
              
    //解决缓存的转换   
    if(url.indexOf("?")>=0){  
        url=url + "&t=" + (new Date()).valueOf();  
    }else{  
       url=url+"?+="+(new Date()).valueOf();  
    }  
      
   //解决跨域的问题   
   if(url.indexOf("http://")>=0){  
        url.replace("?","&");  
        url="Proxy?url=" +url;  
   }  
    this.xmlhttp.open(method,url,true);  
     
    //如果是POST方式,需要设置请求头   
   if(method=="POST"){  
       this.xmlhttp.setRequestHeader("Content-type","application/x-www-four-urlencoded");  
    }  
    this.xmlhttp.send(data);  
    }else{  
            alert("XMLHttpRequest对象创建失败,无法发送数据!");  
    }  
    MyXMLHttpRequest.prototype.abort=function(){  
            this.xmlhttp.abort(); 
    }  
} 

附1:这个对象的属性和方法:
属性
说明
readyState
表示XMLHttpRequest对象的状态:0:未初始化。对象已创建,未调用open;
1:open方法成功调用,但Sendf方法未调用;
2:send方法已经调用,尚未开始接受数据;
3:正在接受数据。Http响应头信息已经接受,但尚未接收完成;
4:完成,即响应数据接受完成。
Onreadystatechange
请求状态改变的事件触发器(readyState变化时会调用这个属性上注册的javascript函数)。
responseText
服务器响应的文本内容
responseXML
服务器响应的XML内容对应的DOM对象
Status
服务器返回的http状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。
statusText
服务器返回状态的文本信息。


方法
说明
Open(string method,string url,boolean asynch,
String username,string password)
指定和服务器端交互的HTTP方法,URL地址,即其他请求信息;
Method:表示http请求方法,一般使用"GET","POST".
url:表示请求的服务器的地址;
asynch:表示是否采用异步方法,true为异步,false为同步;
后边两个可以不指定,username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。
Send(content)
向服务器发出请求,如果采用异步方式,该方法会立即返回。
content可以指定为null表示不发送数据,其内容可以是DOM对象,输入流或字符串。

SetRequestHeader(String header,String Value)
设置HTTP请求中的指定头部header的值为value.
此方法需在open方法以后调用,一般在post方式中使用。
getAllResponseHeaders()
返回包含Http的所有响应头信息,其中相应头包括Content-length,date,uri等内容。
返回值是一个字符串,包含所有头信息,其中每个键名和键值用冒号分开,每一组键之间用CR和LF(回车加换行符)来分隔!
getResponseHeader(String header)
返回HTTP响应头中指定的键名header对应的值
Abort()
停止当前http请求。对应的XMLHttpRequest对象会复位到未初始化的状态。


附2:
HTTP状态码status的全部属性值及含义:
1xx:请求收到,继续处理
2xx:操作成功收到,分析、接受
3xx:完成此请求必须进一步处理
4xx:请求包含一个错误语法或不 能完成
5xx:服务器执行一个完全有效请求失败 
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本 
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求 
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除 
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求
也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下
一级服务器不能满足请求 
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本 
--- 
英文版: 
100:Continue
101:Switching Protocols
102:Processing 
200:OK
201:Created
202:Accepted
203:Non-Authoriative Information
204:No Content
205:Reset Content
206:Partial Content
207:Multi-Status 
300:Multiple Choices
301:Moved Permanently
302:Found
303:See Other
304:Not Modified
305:Use Proxy
306:(Unused)
307:Temporary Redirect 
400:Bad Request
401:Unauthorized
402:Payment Granted
403:Forbidden
404:File Not Found
405:Method Not Allowed
406:Not Acceptable
407:Proxy Authentication Required
408:Request Time-out
409:Conflict
410:Gone
411:Length Required
412:Precondition Failed
413:Request Entity Too Large
414:Request-URI Too Large
415:Unsupported Media Type
416:Requested range not satisfiable
417:Expectation Failed
422:Unprocessable Entity
423:Locked
424:Failed Dependency 
500:Internal Server Error
501:Not Implemented
502:Bad Gateway
503:Service Unavailable
504:Gateway Timeout
505:HTTP Version Not Supported
507:Insufficient Storage


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值