我有一个AJAX帖子功能,我用于我的服务器和我之间的通信;用户网页。但是在我的可恢复功能中处理来自服务器的响应时我遇到了问题。
如果您看到以下示例,您将看到函数outputEmailDetailsResult()被调用&运行在“post(”forgotPass.py“,emailParam,outputEmailDetailsResult());”,即,当函数作为参数传递时。但它应该只在post函数内部运行,以响应服务器响应:
var xmlhttp;
function post( dest, params, callbackFunction )
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
callbackFunction;
}
}
xmlhttp.open("POST",dest,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send( params ); // "fname=Henry&lname=Ford");
}
function emailLoginDetails()
{
var emailParam = "email=sam"; // + document.getElementById( "forgotEmail" ).innerText;
alert( emailParam );
post( "forgotPass.py", emailParam, outputEmailDetailsResult() );
}
function outputEmailDetailsResult()
{
try
{
document.getElementById( "statusOutput" ).value = xmlhttp.responseText;
}
catch ( ex )
{
document.getElementById( "statusOutput" ).value = "Failed to get response from server";
}
}
我是新手传递函数作为参数(我认为它们被称为回调?)&我不确定我做得对吗?
答案 0 :(得分:2)
我想您需要做的是从回调参数删除括号;
在您的emailLoginDetails()函数中:
post( "forgotPass.py", emailParam, outputEmailDetailsResult );
答案 1 :(得分:0)
将括号从回调参数移动到函数。像这样。
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
callbackFunction();
}
...
post( "forgotPass.py", emailParam, outputEmailDetailsResult);
您所做的是在outputEmailDetailsResult()
之前调用post
,因此您实际上将outputEmailDetailsResult()
函数的结果作为参数传递而不是函数本身作为参数。