请看下端脚本,我做的一个脚本检测标题是否重复的,若重复,不让其提交。
函数入口是check()函数,在其else语句中调用了sendRequestTitle();通过sendRequestTitle();
的响应函数processResponseTitle()来根据后台的判断情况修改flag的值,flag是个全局变量,这样写在processResponseTitle()函数里应该可以修改其职的呀,但是结果是修改无效。请高手指点一二。
<script type="text/javascript">
var flag=false;//标示标题是否已存在
<!-- ajax判断标题重复 --> var XMLHttpReq;
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) {
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
//发送请求函数
function sendRequestTitle() {
var title=document.getElementById("title").value; //取得输入的信息标题
//alert(title);
var url="KeyWordNameCheckServlet";
var urlstr="title="+title+"&r=000";
createXMLHttpRequest();
XMLHttpReq.open("POST", url, true); //建立与服务器的连接.
XMLHttpReq.onreadystatechange = processResponseTitle;//指定响应函数
XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
XMLHttpReq.send(urlstr); // 发送请求
}
/ / 响应函数
function processResponseTitle()
{
if (XMLHttpReq.status == 200)
{
var response = XMLHttpReq.responseText;
if(response.substring(0,4)=="true"){
flag=true;
alert("该条信息已经存在!");
return false;
}else{
flag=false;
return true;
}
}else
{
alert("您所请求的页面有异常!");
}
//}
}
function check()//=====================本次脚本执行的入口===========================
{
title=document.form1.title.value;
if (title=="")
{
alert("请输入标题!");
return false;
}
else
{
sendRequestTitle();
//alert(flag);//若是不屏蔽掉这条语句,flag在最前面的初始值就能正确显示出来,否则显示不出来,为何?
if(flag)return false;
else return true;
}
}</script>
函数入口是check()函数,在其else语句中调用了sendRequestTitle();通过sendRequestTitle();
的响应函数processResponseTitle()来根据后台的判断情况修改flag的值,flag是个全局变量,这样写在processResponseTitle()函数里应该可以修改其职的呀,但是结果是修改无效。请高手指点一二。
<script type="text/javascript">
var flag=false;//标示标题是否已存在
<!-- ajax判断标题重复 --> var XMLHttpReq;
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) {
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
//发送请求函数
function sendRequestTitle() {
var title=document.getElementById("title").value; //取得输入的信息标题
//alert(title);
var url="KeyWordNameCheckServlet";
var urlstr="title="+title+"&r=000";
createXMLHttpRequest();
XMLHttpReq.open("POST", url, true); //建立与服务器的连接.
XMLHttpReq.onreadystatechange = processResponseTitle;//指定响应函数
XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
XMLHttpReq.send(urlstr); // 发送请求
}
/ / 响应函数
function processResponseTitle()
{
if (XMLHttpReq.status == 200)
{
var response = XMLHttpReq.responseText;
if(response.substring(0,4)=="true"){
flag=true;
alert("该条信息已经存在!");
return false;
}else{
flag=false;
return true;
}
}else
{
alert("您所请求的页面有异常!");
}
//}
}
function check()//=====================本次脚本执行的入口===========================
{
title=document.form1.title.value;
if (title=="")
{
alert("请输入标题!");
return false;
}
else
{
sendRequestTitle();
//alert(flag);//若是不屏蔽掉这条语句,flag在最前面的初始值就能正确显示出来,否则显示不出来,为何?
if(flag)return false;
else return true;
}
}</script>
{
sendRequestTitle(); //这个是异步的执行顺序 在AJAX还在执行的时候 程序已经执行下面的语句了 这个时候 flag还是初始的flase 不过下面如果有alert(...)的话 alert()会停止执行线程 这个停止的时间AJAX的线程就运行完成了 所以更改下程序的运行顺序 或者 设置AJAX同步调用
//alert(flag);//若是不屏蔽掉这条语句,flag在最前面的初始值就能正确显示出来,否则显示不出来,为何?
if(flag)return false;
else return true;
if(flag){
return false;
}else{
return true;
}
//alert(flag);//若是不屏蔽掉这条语句,flag在最前面的初始值就能正确显示出来,否则显示不出来,为何?
if(flag)return false;
else return true;改成return sendRequestTitle();flag 没变是因为你是用的ajax 是异步 当时结果还没出来 你的js就已经执行到if(flag)return false;了