<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 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素都必须有关闭标签;
XML 标签对大小写敏感;
所有元素都必须彼此正确地嵌套;
XML 文档必须有一个元素是所有其他元素的父元素;
XML 的属性值必须加引号;
避免一些拥有特殊的意义字符,用实体引用来代替;
注释的语法与 HTML 的语法很相似;空格被保留;
一个元素可以包含:
- 其他元素
- 文本
- 属性
- 或混合以上所有..
好了,大致了解了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();
}
}
附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