Повторное использование моей почтовой функции AJAX с помощью CallBacks - PullRequest
0 голосов
/ 07 марта 2011

У меня есть функция публикации 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 ]

2 голосов
/ 07 марта 2011

Полагаю, вам нужно удалить скобки из параметра обратного вызова;В вашей функции emailLoginDetails ():

post( "forgotPass.py", emailParam, outputEmailDetailsResult );
0 голосов
/ 07 марта 2011

Переместить скобки из параметра обратного вызова в функцию.Вот так.

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
  callbackFunction();
}

...

post( "forgotPass.py", emailParam, outputEmailDetailsResult);

То, что вы делали, вызывало outputEmailDetailsResult() до post, поэтому вы фактически передавали результат функции outputEmailDetailsResult() в качестве параметра, а несама функция в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...