Обнаружьте ошибку XHR происходит действительно из-за остановки браузера или щелчка к новой странице

наиболее распространенный вариант csv там, который является Excel совместимый, позволит встроенные новые строки, пока поле окружается двойными кавычками.

foo,bar,"blah blah
more blah blah",baz

или

foo,bar,"blah blah
more blah blah"

или

"blah blah
more blah blah",baz

все допустимы. Этот механизм также допускает встроенные запятые.

Используя кавычки вокруг текстовых полей без встроенных новых строк (или запятые) прекрасен также. Если сам текст содержит двойную кавычку затем, механизм для выхода из него должен соединить два, например.

foo,bar,"this person said ""blah blah 
more blah blah""",baz

Запись csv читателя, который обрабатывает, это правильно может быть хитро (особенно при доверии регулярным выражениям).

23
задан olore 18 September 2009 в 13:08
поделиться

1 ответ

Чтобы различать ошибки HTTP ( 404 , 401 , 403 , 500 и т. Д.) .) и ошибки запроса прерывания (т.е. пользователь нажал Esc или перешел на другую страницу), вы можете проверить свойство XHR.status, если запрос был прерван, член статуса будет нулевым:

document.getElementById('element').onclick = function () { 
  postRequest ('test/', null, function (response) { // success callback
    alert('Response: ' + response); 
  }, function (xhr, status) { // error callback
    switch(status) { 
      case 404: 
        alert('File not found'); 
        break; 
      case 500: 
        alert('Server error'); 
        break; 
      case 0: 
        alert('Request aborted'); 
        break; 
      default: 
        alert('Unknown error ' + status); 
    } 
  }); 
};

Простая функция postRequest:

function postRequest (url, params, success, error) {  
  var xhr = XMLHttpRequest ? new XMLHttpRequest() : 
                             new ActiveXObject("Microsoft.XMLHTTP"); 
  xhr.open("POST", url, true); 
  xhr.onreadystatechange = function(){ 
    if ( xhr.readyState == 4 ) { 
      if ( xhr.status == 200 ) { 
    success(xhr.responseText); 
      } else { 
    error(xhr, xhr.status); 
      } 
    } 
  }; 
  xhr.onerror = function () { 
    error(xhr, xhr.status); 
  }; 
  xhr.send(params); 
} 

Запустите приведенный выше фрагмент здесь .

39
ответ дан 29 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: