2017-02-06 10 views
0
function mathStringEditor(inStr){ 
    inStr = inStr.replace(/\[math\]\(/g,""); 
    inStr = inStr.substring(0,inStr.length-1); 
    inStr = inStr.trim(); 

    var xmlhttp; 
    if(window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();} else {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} 
    xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
     var mathBox = parseMath(xmlhttp); 
     var par = document.createElement("div"); 
     par.appendChild(mathBox); 
     return par.innerHTML; 
     }}; 
    xmlhttp.open("GET", inStr, false); 
    xmlhttp.send(); 
    } 

Мне нужна функция выше, чтобы вернуть строку, но она продолжает считаться неопределенной. Я тестировал, что parseMath успешно возвращает элемент таблицы. Вход - это что-то вроде линий inStr = "[math](mathURL)", поэтому первые три строки должны просто уменьшить inStr до "mathURL". Кроме того, я не нарушаю политику «Одинаковый исход», и этот путь относится к документу html, поэтому я уверен, что все в порядке.Я не могу получить функцию, использующую синхронный xmlhttprequest для возврата данных

Моя главная проблема заключается в том, что я не знаю, как правильно использовать xmlhttprequest, поэтому я мог бы не делать этого синхронно. Я читал некоторых людей с неопределенно похожими проблемами, которым говорили использовать обратные вызовы, но я не понимаю, как моя оригинальная функция собирается что-то вернуть с ними.

Строка, которую я возвращаю, войдет в большую внутреннюю область HTTML, поэтому я не могу просто подключить ее к документу. Плохая форма, которую я знаю, но пока я не хочу переписывать остальную часть моего кода. Я знаю, что у меня есть что-то в этом направлении, чтобы работать раньше, но я думаю, я не знаю, как я получил его на работу. Разве это имеет значение, если я использую responseXML против responseText? Я использую responseXML в parseMath.

Я тоже нахожусь в firefox, если это имеет значение.

ответ

1

У вас нет отчета return для mathStringEditor, поэтому он всегда будет возвращаться undefined.

Если вы используете синхронные XHR (который вы должны не, это осуждается и ухудшает производительность), то вам необходимо сделать вашу обработку в одной и той же функции, после send() вызова.