2016-06-16 2 views
0

Я использую XMLHttpRequest в javascript, чтобы сделать запрос HTTP на локальный сервер. Это код, который я использую.Возвращение ответа HTTP в javascript

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "//localhost:5000/translate", true); 
xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); 
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); 
xhr.send(JSON.stringify({"sentence":str})); 


xhr.onreadystatechange = processRequest; 

function processRequest(e) 
{ 
    if (xhr.readyState == 4) 
    { 
    console.log('trans_res set'); 
    trans_res = xhr.responseText; // here trans_res is a global variable 
    return String(xhr.responseText); 
    } 
} 

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

Для этого я попробовал два метода, 1) Я попытался возвращающимся ответ и печатающие отклик в консоли

var temp = function(string) 
console.log(temp) 

но переменная температура, что грядет как неопределенные в консоли, в основном, я думаю, это потому, что перед речь идет о console.log он еще не установлен (ответ не вернулся)

2) Я поставил глобальную переменную (trans_res) и установите его в функции и распечатать его

var temp = function(string) 
console.log(trans_res) 

Однако он также подходит как неопределенный.

Как я могу гарантировать, что я верну ответ, все в порядке, если мне нужно остановить выполнение где-то посередине, но я хочу, чтобы был действительный ответ.

ответ

0

Вам нужна новая отвертка. Вы отправляете запрос на амазонку с почтовым ящиком (trans_res), куда отправлять. Amazon работает асинхронно с вами. Если вы посмотрите через несколько минут в своем почтовом ящике, вы не найдете отвертку. Через час тоже. Проблема с «почтовым ящиком» заключается в том, что вы не знаете времени, чтобы посмотреть.

Вы должны сделать работу (с указанием, изменения, информирующее), когда readyState получает 4.

+0

Yup, я получаю это, вы можете предложить какой-то метод ожидания, чтобы выполнение остановилось до получения ответа. – user40647

+0

Это проблема, остановка Javascript означает остановку всего браузера (вкладка). Нет многопоточности. Вы можете сделать 'timer = window.setInterval (testMyResult, 250)' и 'function testMyResult()'. Он будет опросить ваш «почтовый ящик» 4 раза в секунду. Если результат получен, вы должны «window.clearInterval (timer)». – Holger

0

Я думаю, что ответ на @Holger несколько правильно. Вы проверяете возвращаемое значение до его фактического генерирования по функции. Иногда возникают длительные процессы, требующие времени для создания значения. Либо вы должны сосредоточиться на том, чтобы сделать функцию быстрее, либо продолжить проверку возвращаемого значения.

Используйте if-else инструкции для проверки значения. Когда это не определено, запишите его. Вы можете использовать анимацию загрузочного диска на стороне пользователя, если она связана с UX.

Смежные вопросы