TimWatson123 Ответов: 2

XMLHttpRequest не получает ответа


Привет, в настоящее время я использую загрузчик файлов на своем веб-сайте для загрузки файлов в свою базу данных. Перед загрузкой файла мне нужно выполнить некоторую проверку, которая может быть выполнена только на стороне сервера, так как он должен получить доступ к базе данных. Загрузчик использует XMLHttpRequest, а мое приложение использует ASP.Чистые веб-формы. Проблема заключается в том, что если проверка завершается неудачно на стороне сервера и возвращается ошибка, то ответ не принимается на стороне клиента. Он работает правильно, если файл загружен или даже если проверка выполняется после загрузки файла. Во всяком случае, ниже приведен простой пример того, что я делаю.

Язык JavaScript
var xhr = this._xhrs[id] = new XMLHttpRequest();

xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
    self._onComplete(id, xhr);
  }
};

xhr.open("POST", queryString, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.send(file);


ГЛ.
Sub ProcessRequest(ByVal context As HttpContext) Implements HttpHandler.ProcessRequest
  Dim fileName As String = context.Request.QueryString("qqfile")

  if Not Database.IsValid(fileName) then
  begin
    context.Response.Write("{error:""Invalid file""}")
    Return
  end If

  Dim newFile As New FileStream(strPath + "\" + fileName, FileMode.Create)
  Dim body As Byte() = context.Request.BinaryRead(context.Request.TotalBytes)
  newFile.Write(body, 0, body.Length)
  newFile.Flush()
  newFile.Close()  
  context.Response.Write("{success: true}")

End Sub

Yuri Vital

Вы слушаете readyState == только 4 ...
Пробовали посмотреть, что происходит на ReadyState =3 ?

Вы видели, что добавляется во время связи клиент/сервер, захватывая пакет с помощью Fiddler (http://www.fiddler2.com/fiddler2/) ?

TimWatson123

Я не получаю readyState == 3 при возврате ошибки до того, как я загрузил файл, только после того, как я загрузил файл. Но я действительно получаю readyState == 1 и статус [исключение: DOMException]. Есть идеи, почему?

Yuri Vital

readyState == 1 означает "соединение открыто" смотрите здесь : http://www.w3.org/TR/XMLHttpRequest/#event-handler-attributes

Вы пробовали ответить просто : {success: false}
???

TimWatson123

Да, я пробовал это сделать, но ничего не вышло.

Если я вызову запрос.TotalBytes перед возвращением кода ошибки он работает. Единственная проблема заключается в том, что TotalBytes зависает до тех пор, пока полный файл не будет загружен на сервер. По какой-то причине я получаю только readyStates 1 и 4 при возврате перед загрузкой. Я думаю, что это моя главная проблема:

"responseText типа DOMString
Если атрибут readyState имеет значение, отличное от 3 (Receiving) или 4 (Loaded), то это должна быть пустая строка. В противном случае это должно быть тело полученных до сих пор данных, интерпретированных с использованием кодировки символов, указанной в ответе, или UTF-8, если кодировка символов не была указана. Недопустимые байты должны быть преобразованы в символ замены U+FFFD."
http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-readystate

Пытаюсь ли я установить текст ответа, когда readyState не равен 3 или 4? Если да, то есть ли способ заставить readyState измениться на 3 или 4 серверную сторону перед установкой текста ответа?

2 Ответов

Рейтинг:
1

submarelime

если вы находитесь в Windows, вы можете разместить свой XMLHTTPRequest в папке экспорта, которая находится в каталоге Windows System32 в разделе inserv....каждый раз, когда компьютер выключается, все, что находится в этом файле экспорта, "подхватывается" и принимается ...или команда winremotemgmt IIS с помощью этой папки в заднюю дверь, чтобы забрать свой коллекционирования...факсы и т. д.


Рейтинг:
0

Sunasara Imdadhusen

Вы можете воспользоваться помощью следующих лиц:

Легкая загрузка изображений с анимацией[^]