使用CallBacks重用我的AJAX post函数

时间:2011-03-06 22:48:04

标签: javascript ajax callback

我有一个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";
    }
}

我是新手传递函数作为参数(我认为它们被称为回调?)&我不确定我做得对吗?

2 个答案:

答案 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()函数的结果作为参数传递而不是函数本身作为参数。