2015-08-14 2 views

ответ

0

Итак, прежде всего, почему вы возвращаете что-то из onreadystatechange? Onreadystatechange - это функция обратного вызова, и вполне вероятно, что если вы используете ее явно (то есть var foo = d.onreadystatechange();), вы еще не получите ответа. Как именно вы используете это возвращаемое значение?

Во-вторых, я не уверен, что ваш синтаксис верен для условного «4 == d.readystate;» Возможно, я ошибаюсь, но думаю, вам нужно использовать оператор if.

В-третьих, вы также должны убедиться, что d.status == 200. Если d.readystate == 4, запрос завершен, но не обязательно успешно. Вам все равно нужно проверить, чтобы HTTP-статус запроса был 200 OK.

Приносим извинения, если неясно. Все это написано по телефону. Дайте мне знать, если вам нужны примеры. Надеюсь это поможет!

0

Поскольку вы выполняете async XMLHttpRequest, вы не можете вернуть значение из обратного вызова . Вместо этого вы должны использовать результат в этом обратном вызове или вызвать некоторую другую функцию и передать результат. Возвращая значение из этого обратного вызова, просто возвращает его в недрах движка XHR - он никогда не попадает в ваш код.

Кроме того, вам необходимо убедиться, что и readyState === 4 (что означает, что запрос завершен), и что у вас есть успешный код ответа, либо вам необходимо обработать код ошибки. Вот как:

var d = new XMLHttpRequest(); 
d.open("POST", url, true); 
d.setRequestHeader("Content-type","application/json"); 
d.onreadystatechange = function(){ 
    // if request has finished 
    if (this.readyState === 4){ 
     // if request finished successfully 
     if (this.status === 200) { 
      // process this.responseText here 
     } else { 
      // process this.status error response code here 
     } 
    } 
    } 
}; 
d.send(data); 

Кроме того, одна символьная переменная не делает ваш код более удобочитаемым. Настоятельно рекомендуется использовать значимые имена для всех переменных. Код может быть сокращен с помощью минимизатора до развертывания, сохраняя читаемую версию для редактирования и обслуживания.