Php Javascript函数仅部分执行
我正在编写代码来创建一个基本的聊天室。我的代码将输入的行输入到输入文本框中,然后使用Ajax写入随机文件名,然后使用setInterval每秒进行javascript循环,以从文本文件中加载和显示 在用户使用填充MySQL数据库的信息登录之后,我希望在进入聊天室时将一条基本的欢迎信息自动保存到文本文件中。为此,我使用用户名“Host”调用saveData函数,然后在变量中声明欢迎消息 将登录信息发送到数据库的函数和保存欢迎消息的函数都在login()函数下调用。提交信息表单后调用login()函数 问题是:在login()下调用saveLogin()和saveData()函数时,我无法使这两个函数都完全执行。如果我将其中一个注释掉,而不是另一个注释掉,该函数将正常工作。所以他们独立工作,但不是一起工作。如果两个函数都被调用,则saveData()可以正常工作,但saveLogin()不能。我不知道为什么 我能够将问题缩小到saveLogin()函数下的“XMLHttpRequestObject.send”事件。该函数的其余部分似乎已执行。我想这可能是变量名或其他方面的问题,所以我尝试了一些变体,但没有解决这个问题Php Javascript函数仅部分执行,php,javascript,ajax,function,post,Php,Javascript,Ajax,Function,Post,我正在编写代码来创建一个基本的聊天室。我的代码将输入的行输入到输入文本框中,然后使用Ajax写入随机文件名,然后使用setInterval每秒进行javascript循环,以从文本文件中加载和显示 在用户使用填充MySQL数据库的信息登录之后,我希望在进入聊天室时将一条基本的欢迎信息自动保存到文本文件中。为此,我使用用户名“Host”调用saveData函数,然后在变量中声明欢迎消息 将登录信息发送到数据库的函数和保存欢迎消息的函数都在login()函数下调用。提交信息表单后调用login()函
<script language = "javascript">
// loads XML HTTP per browser type
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
//create random string
function randomString(len, charSet) {
charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var randomString = '';
for (var i = 0; i < len; i++) {
var randomPoz = Math.floor(Math.random() * charSet.length);
randomString += charSet.substring(randomPoz,randomPoz+1);
}
return randomString;
}
rString = randomString(128);
filename = rString;
// loads chat lines from file using POST method with timer
function getData(geturl)
{
if(XMLHttpRequestObject) {
geturl = "getdata.php";
XMLHttpRequestObject.open("POST", geturl);
XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) {
document.formChat2.textarea1.value = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send("filename=" + filename);
}
}
// saves new chat line to file
function saveData(filename, username, newline)
{
if(XMLHttpRequestObject && document.formChat1.txtLine.value != "" || username == "Host") {
var url = "savedata.php";
XMLHttpRequestObject.open("POST", url);
XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) {
}
}
XMLHttpRequestObject.send("filename=" + filename + "&username=" + username + "&newline=" + newline);
document.formChat1.btnDisplay.click();
document.formChat1.txtLine.value = "";
}
}
// saves login info to database
function saveLogin(filename, username, email, phone, weburl)
{
if(XMLHttpRequestObject) {
var loginurl = "login.php";
XMLHttpRequestObject.open("POST", loginurl);
XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) {
}
}
XMLHttpRequestObject.send("filename=" + filename + "&username=" + username + "&email=" + email + "&phone=" + phone + "&weburl=" + weburl);
}
}
function login(divID) {
username = document.formLogin.txtLogin.value;
email = document.formLogin.txtEmail.value;
phone = document.formLogin.txtPhone.value;
weburl = document.formLogin.txtURL.value;
saveLogin(filename, username, email, phone, weburl);
var obj = document.getElementById(divID);
obj.innerHTML = "<div id='targetDiv'><form name='formChat1' method='POST' onSubmit='return false;'><input type='text' name='txtLine' id='txtLine' size='30'><input type='button' name='btnDisplay' value='Display Message' onclick=\"setInterval('getData(filename)', 1000);\"><input type='button' name='btnSave' value='Send Message' onclick='saveData(filename, username, txtLine.value)'></form><form name='formChat2'><textarea name='textarea1' id='textarea1' rows='10' cols='50'></textarea></form></div>";
welcome = "Welcome to the chat.";
saveData(filename, 'Host', welcome);
}
</script>
//按浏览器类型加载XML HTTP
var XMLHttpRequestObject=false;
if(window.XMLHttpRequest){
XMLHttpRequestObject=新的XMLHttpRequest();
}else if(window.ActiveXObject){
XMLHttpRequestObject=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
//创建随机字符串
函数随机字符串(len,charSet){
字符集=字符集| |‘abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz012456789’;
var randomString='';
对于(变量i=0;i
请输入您的信息:
您需要使用不同的XHR对象,这样才能获得两个响应,因为您同时发送两个AJAX请求
编写如下函数:
function getXHR() {
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
return XMLHttpRequestObject;
}
然后在执行AJAX请求的每个函数中调用它,方法是:
var XHRObject = getXHR();
并在函数中使用它。您正在两个函数之间共享一个XHR对象。。。它不能同时运行两个请求。您可以分解代码并只提供与问题相关的代码吗?您不应该重复使用同一个XmlHttpRequest对象。看问题。啊哈!!!我不知道如何重用XHR对象。。。这确实是问题所在。你这家伙真是太棒了!感谢Barmar提供的代码示例。很好用!:)非常感谢!
var XHRObject = getXHR();