教程請(qǐng)到原文獲取:
蒙陰網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年創(chuàng)立以來到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
AJAX準(zhǔn)備知識(shí):JSON
什么是 JSON ?
JSON 指的是 JavaScript 對(duì)象表示法(JavaScript Object Notation)
JSON 是輕量級(jí)的文本數(shù)據(jù)交換格式
JSON 獨(dú)立于語言 *
JSON 具有自我描述性,更易理解
* JSON 使用 JavaScript 語法來描述數(shù)據(jù)對(duì)象,但是 JSON 仍然獨(dú)立于語言和平臺(tái)。JSON 解析器和 JSON 庫(kù)支持許多不同的編程語言。
啥都別多說了,上圖吧!
合格的json對(duì)象:
["one", "two", "three"]{ "one": 1, "two": 2, "three": 3 }{"names": ["張三", "李四"] }[ { "name": "張三"}, {"name": "李四"} ]
不合格的json對(duì)象:
{ name: "張三", 'age': 32 } ?// 屬性名必須使用雙引號(hào)[32, 64, 128, 0xFFF] // 不能使用十六進(jìn)制值{ "name": "張三", "age": undefined } ?// 不能使用undefined{ "name": "張三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": ?function() {return this.name;} ?// 不能使用函數(shù)和日期對(duì)象}
stringify與parse方法
JavaScript中關(guān)于JSON對(duì)象和字符串轉(zhuǎn)換的兩個(gè)方法:
JSON.parse(): 用于將一個(gè) JSON 字符串轉(zhuǎn)換為 JavaScript 對(duì)象
JSON.parse('{"name":"Q1mi"}'); JSON.parse('{name:"Q1mi"}') ; // 錯(cuò)誤 JSON.parse('[18,undefined]') ; // 錯(cuò)誤
JSON.stringify(): 用于將 JavaScript 值轉(zhuǎn)換為 JSON 字符串?!?/p>
JSON.stringify({"name":"Q1mi"})
和XML的比較
JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁瑣笨重的 XML 格式。
JSON 格式有兩個(gè)顯著的優(yōu)點(diǎn):書寫簡(jiǎn)單,一目了然;符合 JavaScript 原生語法,可以由解釋引擎直接處理,不用另外添加解析代碼。所以,JSON迅速被接受,已經(jīng)成為各大網(wǎng)站交換數(shù)據(jù)的標(biāo)準(zhǔn)格式,并被寫入ECMAScript 5,成為標(biāo)準(zhǔn)的一部分。
XML和JSON都使用結(jié)構(gòu)化方法來標(biāo)記數(shù)據(jù),下面來做一個(gè)簡(jiǎn)單的比較。
用XML表示中國(guó)部分省市數(shù)據(jù)如下:
?xml version="1.0" encoding="utf-8"?country
name中國(guó)/name
province
?name黑龍江/name
?cities
? ? ?city哈爾濱/city
? ? ?city大慶/city
?/cities
/province
province
?name廣東/name
?cities
? ? ?city廣州/city
? ? ?city深圳/city
? ? ?city珠海/city
?/cities
/province
province
?name臺(tái)灣/name
?cities
? ? ?city臺(tái)北/city
? ? ?city高雄/city
?/cities
/province
province
?name新疆/name
?cities
? ? ?city烏魯木齊/city
?/cities
/province/countryXML格式數(shù)據(jù)
XML格式數(shù)據(jù)
用JSON表示如下:
{
"name": "中國(guó)",
"province": [{
?"name": "黑龍江",
?"cities": {
? ? ?"city": ["哈爾濱", "大慶"]
?}
}, {
?"name": "廣東",
?"cities": {
? ? ?"city": ["廣州", "深圳", "珠海"]
?}
}, {
?"name": "臺(tái)灣",
?"cities": {
? ? ?"city": ["臺(tái)北", "高雄"]
?}
}, {
?"name": "新疆",
?"cities": {
? ? ?"city": ["烏魯木齊"]
?}
}]}JSON格式數(shù)據(jù)
JSON格式數(shù)據(jù)
由上面的兩端代碼可以看出,JSON 簡(jiǎn)單的語法格式和清晰的層次結(jié)構(gòu)明顯要比 XML 容易閱讀,并且在數(shù)據(jù)交換方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得節(jié)約傳輸數(shù)據(jù)所占用得帶寬。
AJAX簡(jiǎn)介
AJAX(Asynchronous Javascript And XML)翻譯成中文就是“異步的Javascript和XML”。即使用Javascript語言與服務(wù)器進(jìn)行異步交互,傳輸?shù)臄?shù)據(jù)為XML(當(dāng)然,傳輸?shù)臄?shù)據(jù)不只是XML)。
AJAX 不是新的編程語言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法。
AJAX 最大的優(yōu)點(diǎn)是在不重新加載整個(gè)頁面的情況下,可以與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁內(nèi)容。(這一特點(diǎn)給用戶的感受是在不知不覺中完成請(qǐng)求和響應(yīng)過程)
AJAX 不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。
同步交互:客戶端發(fā)出一個(gè)請(qǐng)求后,需要等待服務(wù)器響應(yīng)結(jié)束后,才能發(fā)出第二個(gè)請(qǐng)求;
異步交互:客戶端發(fā)出一個(gè)請(qǐng)求后,無需等待服務(wù)器響應(yīng)結(jié)束,就可以發(fā)出第二個(gè)請(qǐng)求。
示例
頁面輸入兩個(gè)整數(shù),通過AJAX傳輸?shù)胶蠖擞?jì)算出結(jié)果并返回。
!DOCTYPE htmlhtml lang="en"head
meta charset="UTF-8"
meta http-equiv="x-ua-compatible" content="IE=edge"
meta name="viewport" content="width=device-width, initial-scale=1"
titleAJAX局部刷新實(shí)例/title/headbodyinput type="text" id="i1"+input type="text" id="i2"=input type="text" id="i3"input type="button" value="AJAX提交" id="b1"script src="/static/jquery-3.2.1.min.js"/scriptscript
$("#b1").on("click", function () {
$.ajax({
url:"/ajax_add/",
type:"GET",
data:{"i1":$("#i1").val(),"i2":$("#i2").val()},
success:function (data) {
?$("#i3").val(data);
}
})
})/script/body/htmlHTML部分代碼
HTML部分代碼
def ajax_demo1(request):
return render(request, "ajax_demo1.html")
def ajax_add(request):
i1 = int(request.GET.get("i1"))
i2 = int(request.GET.get("i2"))
ret = i1 + i2
return JsonResponse(ret, safe=False)
views.py
views.py
rlpatterns = [
...
url(r'^ajax_add/', views.ajax_add),
url(r'^ajax_demo1/', views.ajax_demo1),
... ?
]
urls.py
AJAX常見應(yīng)用情景
搜索引擎根據(jù)用戶輸入的關(guān)鍵字,自動(dòng)提示檢索關(guān)鍵字。
還有一個(gè)很重要的應(yīng)用場(chǎng)景就是注冊(cè)時(shí)候的用戶名的查重。
其實(shí)這里就使用了AJAX技術(shù)!當(dāng)文件框發(fā)生了輸入變化時(shí),使用AJAX技術(shù)向服務(wù)器發(fā)送一個(gè)請(qǐng)求,然后服務(wù)器會(huì)把查詢到的結(jié)果響應(yīng)給瀏覽器,最后再把后端返回的結(jié)果展示出來。
整個(gè)過程中頁面沒有刷新,只是刷新頁面中的局部位置而已!
當(dāng)請(qǐng)求發(fā)出后,瀏覽器還可以進(jìn)行其他操作,無需等待服務(wù)器的響應(yīng)!
當(dāng)輸入用戶名后,把光標(biāo)移動(dòng)到其他表單項(xiàng)上時(shí),瀏覽器會(huì)使用AJAX技術(shù)向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器會(huì)查詢名為lemontree7777777的用戶是否存在,最終服務(wù)器返回true表示名為lemontree7777777的用戶已經(jīng)存在了,瀏覽器在得到結(jié)果后顯示“用戶名已被注冊(cè)!”。
整個(gè)過程中頁面沒有刷新,只是局部刷新了;
在請(qǐng)求發(fā)出后,瀏覽器不用等待服務(wù)器響應(yīng)結(jié)果就可以進(jìn)行其他操作;
AJAX的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
AJAX使用JavaScript技術(shù)向服務(wù)器發(fā)送異步請(qǐng)求;
AJAX請(qǐng)求無須刷新整個(gè)頁面;
因?yàn)榉?wù)器響應(yīng)內(nèi)容不再是整個(gè)頁面,而是頁面中的部分內(nèi)容,所以AJAX性能高;
jQuery實(shí)現(xiàn)的AJAX
最基本的jQuery發(fā)送AJAX請(qǐng)求示例:
!DOCTYPE htmlhtml lang="zh-CN"head
meta charset="UTF-8"
meta http-equiv="x-ua-compatible" content="IE=edge"
meta name="viewport" content="width=device-width, initial-scale=1"
titleajax test/title
script src=""/script/headbodybutton id="ajaxTest"AJAX 測(cè)試/buttonscript
$("#ajaxTest").click(function () {
$.ajax({ ? ? ?url: "/ajax_test/", ? ? ?type: "POST", ? ? ?data: {username: "Q1mi", password: 123456}, ? ? ?success: function (data) {
?alert(data)
}
})
})/script/body/html
views.py:
def ajax_test(request): user_name = request.POST.get("username") password = request.POST.get("password") print(user_name, password) return HttpResponse("OK")
$.ajax參數(shù)
data參數(shù)中的鍵值對(duì),如果值值不為字符串,需要將其轉(zhuǎn)換成字符串類型。
def ajax_test(request):
user_name = request.POST.get("username")
password = request.POST.get("password")
print(user_name, password)
return HttpResponse("OK")
JS實(shí)現(xiàn)AJAX
var b2 = document.getElementById("b2");
b2.onclick = function () {
// 原生JS ? ?var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", "/ajax_test/", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send("username=q1mipassword=123456");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState === 4 xmlHttp.status === 200) {
?alert(xmlHttp.responseText);
}
};
};
AJAX請(qǐng)求如何設(shè)置csrf_token
方式1
通過獲取隱藏的input標(biāo)簽中的csrfmiddlewaretoken值,放置在data中發(fā)送。
$.ajax({ ?url: "/cookie_ajax/", ?type: "POST", ?data: {
"username": "Q1mi",
"password": 123456,
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() ?// 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中 ?}, ?success: function (data) {
console.log(data);
}})
方式2
通過獲取返回的cookie中的字符串 放置在請(qǐng)求頭中發(fā)送。
注意:需要引入一個(gè)jquery.cookie.js插件。
$.ajax({ ?url: "/cookie_ajax/", ?type: "POST", ?headers: {"X-CSRFToken": $.cookie('csrftoken')}, ?// 從Cookie取csrftoken,并設(shè)置到請(qǐng)求頭中 ?data: {"username": "Q1mi", "password": 123456}, ?success: function (data) {
console.log(data);
}})
或者用自己寫一個(gè)getCookie方法:
function getCookie(name) {
var cookieValue = null;
if (document.cookie document.cookie !== '') {
?var cookies = document.cookie.split(';');
?for (var i = 0; i cookies.length; i++) {
? ? ?var cookie = jQuery.trim(cookies[i]);
? ? ?// Does this cookie string begin with the name we want? ? ? ? ? ? ?if (cookie.substring(0, name.length + 1) === (name + '=')) {
? ? ? ? ?cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
? ? ? ? ?break;
? ? ?}
?}
}
return cookieValue;}var csrftoken = getCookie('csrftoken');
每一次都這么寫太麻煩了,可以使用$.ajaxSetup()方法為ajax請(qǐng)求統(tǒng)一設(shè)置。
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection ?return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));}$.ajaxSetup({ ?beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}});
注意:
如果使用從cookie中取csrftoken的方式,需要確保cookie存在csrftoken值。
如果你的視圖渲染的HTML文件中沒有包含 {% csrf_token %},Django可能不會(huì)設(shè)置CSRFtoken的cookie。
這個(gè)時(shí)候需要使用ensure_csrf_cookie()裝飾器強(qiáng)制設(shè)置Cookie。
django.views.decorators.csrf import ensure_csrf_cookie @ensure_csrf_cookie def login(request): pass
更多細(xì)節(jié)詳見:Djagno官方文檔中關(guān)于CSRF的內(nèi)容
AJAX上傳文件
XMLHttpRequest 是一個(gè)瀏覽器接口,通過它,我們可以使得 Javascript 進(jìn)行 HTTP (S) 通信。XMLHttpRequest 在現(xiàn)在瀏覽器中是一種常用的前后臺(tái)交互數(shù)據(jù)的方式。2008年 2 月,XMLHttpRequest Level 2 草案提出來了,相對(duì)于上一代,它有一些新的特性,其中 FormData 就是 XMLHttpRequest Level 2 新增的一個(gè)對(duì)象,利用它來提交表單、模擬表單提交,當(dāng)然最大的優(yōu)勢(shì)就是可以上傳二進(jìn)制文件。下面就具體
首先看一下formData的基本用法:FormData對(duì)象,可以把所有表單元素的name與value組成一個(gè)queryString,提交到后臺(tái)。只需要把 form 表單作為參數(shù)傳入 FormData 構(gòu)造函數(shù)即可:
介紹一下如何利用 FormData 來上傳文件。
django.views.decorators.csrf import ensure_csrf_cookie@ensure_csrf_cookiedef login(request):
pass
或者使用
var form = document.getElementById("form1"); var fd = new FormData(form);
這樣也可以直接通過ajax 的 send() 方法將 fd 發(fā)送到后臺(tái)。
注意:由于 FormData 是 XMLHttpRequest Level 2 新增的接口,現(xiàn)在 低于IE10 的IE瀏覽器不支持 FormData。
練習(xí)(用戶名是否已被注冊(cè))
功能介紹
在注冊(cè)表單中,當(dāng)用戶填寫了用戶名后,把光標(biāo)移開后,會(huì)自動(dòng)向服務(wù)器發(fā)送異步請(qǐng)求。服務(wù)器返回這個(gè)用戶名是否已經(jīng)被注冊(cè)過。
案例分析
頁面中給出注冊(cè)表單;
在username input標(biāo)簽中綁定onblur事件處理函數(shù)。
當(dāng)input標(biāo)簽失去焦點(diǎn)后獲取 username表單字段的值,向服務(wù)端發(fā)送AJAX請(qǐng)求;
django的視圖函數(shù)中處理該請(qǐng)求,獲取username值,判斷該用戶在數(shù)據(jù)庫(kù)中是否被注冊(cè),如果被注冊(cè)了就返回“該用戶已被注冊(cè)”,否則響應(yīng)“該用戶名可以注冊(cè)”。
序列化
Django內(nèi)置的serializers
def books_json(request): book_list = models.Book.objects.all()[0:10] from django.core import serializers ret = serializers.serialize("json", book_list) return HttpResponse(ret)
補(bǔ)充一個(gè)SweetAlert插件示例
點(diǎn)擊下載Bootstrap-sweetalert項(xiàng)目。
$(".btn-danger").on("click", function () {
swal({ ? ?title: "你確定要?jiǎng)h除嗎?", ? ?text: "刪除可就找不回來了哦!", ? ?type: "warning", ? ?showCancelButton: true, ? ?confirmButtonClass: "btn-danger", ? ?confirmButtonText: "刪除", ? ?cancelButtonText: "取消", ? ?closeOnConfirm: false
},
function () {
var deleteId = $(this).parent().parent().attr("data_id");
$.ajax({ ? ? ? ?url: "/delete_book/", ? ? ? ?type: "post", ? ? ? ?data: {"id": deleteId}, ? ? ? ?success: function (data) {
? ?if (data.status === 1) {
? ? ?swal("刪除成功!", "你可以準(zhǔn)備跑路了!", "success");
? ?} else {
? ? ?swal("刪除失敗", "你可以再嘗試一下!", "error")
? ?}
?}
})
});})
原文:AJAX -?
作者:Q1mi -?
出自:博客園-
AJAX路線圖
AJAX教程
需要教程得可以留言“AJAX”看到后會(huì)發(fā)給你們
就是先生成一個(gè)范圍數(shù)組,然后數(shù)組打亂順序,截取你需要的個(gè)數(shù)即為所求(不過這種方式在火狐瀏覽器下并不是很隨機(jī),多刷新幾次,你會(huì)發(fā)現(xiàn),很多時(shí)候還是很有規(guī)律的,甚至順序)
第二種接觸檢測(cè)json對(duì)象索引值來判斷查重處理
具體代碼如下
JavaScript code
/*
num 要產(chǎn)生多少個(gè)隨機(jī)數(shù)
from 產(chǎn)生隨機(jī)數(shù)的最小值
to 產(chǎn)生隨機(jī)數(shù)的最大值
*/
function createRandom(num ,from ,to )
{
var arr=[];
for(var i=from;i=to;i++)
arr.push(i);
arr.sort(function(){
return 0.5-Math.random();
});
arr.length=num;
return arr;
}
function createRandom2(num , from , to)
{
var arr=[];
var json={};
while(arr.lengthnum)
{
//產(chǎn)生單個(gè)隨機(jī)數(shù)
var ranNum=Math.ceil(Math.random()*(to-from))+from;
//通過判斷json對(duì)象的索引值是否存在 來標(biāo)記 是否重復(fù)
if(!json[ranNum])
{
json[ranNum]=1;
arr.push(ranNum);
}
}
return arr;
}
alert(createRandom2(10,0,50));//生成10個(gè)從0-50之間不重復(fù)的隨機(jī)數(shù)
未至科技魔方是一款大數(shù)據(jù)模型平臺(tái),是一款基于服務(wù)總線與分布式云計(jì)算兩大技術(shù)架構(gòu)的一款數(shù)據(jù)分析、挖掘的工具平臺(tái),其采用分布式文件系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),支持海量數(shù)據(jù)的處理。采用多種的數(shù)據(jù)采集技術(shù),支持結(jié)構(gòu)化數(shù)據(jù)及非結(jié)構(gòu)化數(shù)據(jù)的采集。通過圖形化的模型搭建工具,支持流程化的模型配置。通過第三方插件技術(shù),很容易將其他工具及服務(wù)集成到平臺(tái)中去。數(shù)據(jù)分析研判平臺(tái)就是海量信息的采集,數(shù)據(jù)模型的搭建,數(shù)據(jù)的挖掘、分析最后形成知識(shí)服務(wù)于實(shí)戰(zhàn)、服務(wù)于決策的過程,平臺(tái)主要包括數(shù)據(jù)采集部分,模型配置部分,模型執(zhí)行部分及成果展示部分等。
未至科技小蜜蜂網(wǎng)絡(luò)信息雷達(dá)是一款網(wǎng)絡(luò)信息定向采集產(chǎn)品,它能夠?qū)τ脩粼O(shè)置的網(wǎng)站進(jìn)行數(shù)據(jù)采集和更新,實(shí)現(xiàn)靈活的網(wǎng)絡(luò)數(shù)據(jù)采集目標(biāo),為互聯(lián)網(wǎng)數(shù)據(jù)分析提供基礎(chǔ)。
未至科技泵站是一款大數(shù)據(jù)平臺(tái)數(shù)據(jù)抽取工具,實(shí)現(xiàn)db到hdfs數(shù)據(jù)導(dǎo)入功能,借助Hadoop提供高效的集群分布式并行處理能力,可以采用數(shù)據(jù)庫(kù)分區(qū)、按字段分區(qū)、分頁方式并行批處理抽取db數(shù)據(jù)到hdfs文件系統(tǒng)中,能有效解決大數(shù)據(jù)傳統(tǒng)抽取導(dǎo)致的作業(yè)負(fù)載過大抽取時(shí)間過長(zhǎng)的問題,為大數(shù)據(jù)倉(cāng)庫(kù)提供傳輸管道。
未至科技云計(jì)算數(shù)據(jù)中心以先進(jìn)的中文數(shù)據(jù)處理和海量數(shù)據(jù)支撐為技術(shù)基礎(chǔ),并在各個(gè)環(huán)節(jié)輔以人工服務(wù),使得數(shù)據(jù)中心能夠安全、高效運(yùn)行。根據(jù)云計(jì)算數(shù)據(jù)中心的不同環(huán)節(jié),我們專門配備了系統(tǒng)管理和維護(hù)人員、數(shù)據(jù)加工和編撰人員、數(shù)據(jù)采集維護(hù)人員、平臺(tái)系統(tǒng)管理員、機(jī)構(gòu)管理員、輿情監(jiān)測(cè)和分析人員等,滿足各個(gè)環(huán)節(jié)的需要。面向用戶我們提供面向政府和面向企業(yè)的解決方案。
未至科技顯微鏡是一款大數(shù)據(jù)文本挖掘工具,是指從文本數(shù)據(jù)中抽取有價(jià)值的信息和知識(shí)的計(jì)算機(jī)處理技術(shù),
包括文本分類、文本聚類、信息抽取、實(shí)體識(shí)別、關(guān)鍵詞標(biāo)引、摘要等。基于Hadoop
MapReduce的文本挖掘軟件能夠?qū)崿F(xiàn)海量文本的挖掘分析。CKM的一個(gè)重要應(yīng)用領(lǐng)域?yàn)橹悄鼙葘?duì),
在專利新穎性評(píng)價(jià)、科技查新、文檔查重、版權(quán)保護(hù)、稿件溯源等領(lǐng)域都有著廣泛的應(yīng)用。
未至科技數(shù)據(jù)立方是一款大數(shù)據(jù)可視化關(guān)系挖掘工具,展現(xiàn)方式包括關(guān)系圖、時(shí)間軸、分析圖表、列表等多種表達(dá)方式,為使用者提供全方位的信息展現(xiàn)方式。
是不是重名了系統(tǒng)不報(bào)告,需要檢查下面的查重代碼:
$check_query = mysql_query("select uid from user where nicheng='$name' or users='$email' limit 1");
? ? ? ?if(mysql_fetch_array($check_query)){
echo '錯(cuò)誤:用戶名 ',$name,'或',$email,' 已存在。a href="javascript:history.back(-1);"返回/a';
exit;
}
你這個(gè)代碼現(xiàn)在的問題是沒有檢測(cè)mysql_query的結(jié)果,有可能這個(gè)語句是失敗的,那么下面的查重永遠(yuǎn)都得不到滿足。應(yīng)該在數(shù)據(jù)庫(kù)查詢后檢測(cè)查詢語句是否成功,我修改如下,如果運(yùn)行時(shí)候有報(bào)錯(cuò)請(qǐng)根據(jù)報(bào)錯(cuò)復(fù)查你的SQL語句:
$sql="select?uid?from?user?where?nicheng='$name'?or?users='$email'?limit?1";
if?($check_query?=?mysql_query($sql)){
if(mysql_fetch_array($check_query)){
echo?'錯(cuò)誤:用戶名?',$name,'或',$email,'?已存在。a?href="javascript:history.back(-1);"返回/a';
exit;
}
mysql_free_result($check_query);
}else?echo?"檢查重名失敗,SQL:$sqlbr錯(cuò)誤:".mysql_error();
!DOCTYPE?html
html
head
meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"
titleRunJS?演示代碼/title
script
var?map={};
var?reg=/^\s+|\s+$/g;
onload=function(){
var?ul=document.getElementById("ul");
var?lis=ul.getElementsByTagName('li');
for(var?i=0;ilis.length;i++){
map[lis[i].innerHTML.replace(reg,"")]=1;
}
}
var?ok=function(frm){
var?ul=document.getElementById("ul");
var?v=frm.tt.value.replace(reg,"");
if(null==map[v]){
var?li=document.createElement("li");
li.innerHTML=v;
ul.appendChild(li);
map[v]=1;
}else{
alert("“"?+?v?+?"”"?+?"?已經(jīng)存在!");
}
}
/script
/head
body
form?onsubmit="return?false;"
input?type="text"?name="tt"?/input?type="submit"?value="OK"?onclick="ok(this.form)"/
ul?id="ul"
?li蘋果/li
li香蕉/li
li橘子/li
li葡萄/li
/ul/form
/body
/html