Ajax только возвращает readyState == 4 значение - PullRequest
1 голос
/ 06 августа 2010

Хорошо, я везде искал это.Я вырезал пару объявлений переменных, чтобы убедиться, что мой XMLHttpRequest работает.

function submit_edit_form()
{
    // id and title are already declared
    var x = ajax_edit_form_save(id, 'title', title);
    alert(x);
}
function ajax_edit_form_save(id, property, new_value)
{

    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
        // screw IE5 & IE6
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function()
    {
       if (xmlhttp.readyState == 4 && xmlhttp.responseText != '')
       {    
            return xmlhttp.responseText;
       }
    }

    // myURL is already defined. I'm not troubleshooting this part, I know it's working
    xmlhttp.open("GET", myURL, true);
    xmlhttp.send();
}

Поэтому, когда я вызываю submit_edit_form (), которая вызывает ajax_edit_form_save (), я получаю предупреждение 'не определено.Я знаю, что проблема в том, что ajax_edit_form_save () возвращает undefined на readyState 1. Я чешу голову, потому что у меня есть только возврат, когда readyState == 4. Как я могу удержать возвращаемое значение, чтобы x получил фактическое значениеresponseText

Ответы [ 2 ]

3 голосов
/ 06 августа 2010

Ваша функция возвращается даже до завершения вызова ajax, поскольку она асинхронная.Оператор return в вашем «onreadystatechange» не будет иметь никакого эффекта, потому что значение возвращается вызывающей стороне метода «onreadystatechange», который является объектом XMLHttpRequest, а не вашим кодом.

Вы должны передать функцию обратного вызова на ajax_edit_form_save, которая вызывается, когда readystate равен 4

См. Ниже:

function ajax_edit_form_save(id, property, new_value, funCallback) // ==> callback function
{

    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
        // screw IE5 & IE6
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function()
    {
       if (xmlhttp.readyState == 4 && xmlhttp.responseText != '')
       {    
            callback( xmlhttp.responseText ); // =============> callback function called
       }
    }

    // myURL is already defined. I'm not troubleshooting this part, I know it's working
    xmlhttp.open("GET", myURL, true);
    xmlhttp.send();
}

Функция обратного вызова может быть:

function handleReponse(resp) {
  // do something with resp
}

ajax_edit_form_save("myID", "myProperty",  "new value", handleResponse);
0 голосов
/ 06 августа 2010

Где вы взяли это (х) из какого файла?Я думаю, вы забыли упомянуть значение URL.

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