2010-07-14 2 views
2

Я понимаю, что JSON можно использовать вместо XMLHttpRequest в Javascript, но могу ли я сделать запросы и получить полностью произвольные данные?Можете ли вы использовать другие форматы помимо XML с XMLHttpRequest?

Как пользовательский текст или бинарный формат?

Или это интерфейс, ограниченный jSON и XML?

Я надеюсь получить через то, что мне интересно здесь ...

а) Как создать простой запрос без XML или JSON?

b) Как получить результат (ответ) как обычную строку, а не объект?

ответ

4

Да, просто установить тип содержимого:

var request = new XMLHttpRequest(); 
request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); // whatever character set you need. 
request.open("GET", "yourtext.txt", true); 
request.onreadystatechange = function() { 
if(this.readyState == 2) { 
    alert(request.responseText); 
} 
} 
request.send(); 
+0

Спасибо! Это действительно полезно. –

+0

И как вернуть результат в виде простой строки, а не как объекта? –

+0

Отредактировано, чтобы показать вам, как получить текст ответа. – Andir

2

Вы можете использовать любой текстовый формат: XML, JSON, CSV или только text/plain.

Я не уверен, что произойдет, если вы попытаетесь использовать двоичный формат.

+0

Как в 7-битном ASCII? –

+1

Я считаю, что он должен уметь интерпретировать любую кодировку символов, которую браузер может декодировать и возвращать в кодировке Unicode Javascript. – thomasrutter

+0

Чтобы загрузить двоичные данные с помощью XMLHttpRequest в режиме браузера, см. Этот ответ. http://stackoverflow.com/questions/1095102/how-do-i-load-binary-image-data-using-javascript-and-xmlhttprequest/5913807#5913807 – Cheeso

2

Вы можете получить результат обратно в

  • DOM документ (если XML был получен), используя свойство responseXML или
  • Строка (независимо от формата), используя свойство responseText

Некоторые браузеры также могут возвращать его как объект, если это был JSON.

Возможность вернуть что-либо в виде строки позволяет самостоятельно анализировать любой формат.

+0

Как мне сказать, что я хочу, это строка? На данный момент ваш ответ был лучшим ответом, но другие были очень интересны. Я не знал, что должен тоже задавать этот вопрос.:-) –

+2

Просто не прочитав свойство responseXML, прочитайте свойство responseText. Он подробно описан здесь: https://developer.mozilla.org/en/xmlhttprequest – thomasrutter

1

Вы можете установить тип содержимого явно обычный текст перед отправкой():

var request = new XMLHttpRequest(); 
request.open("POST", "/test.php"); 
request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); 
request.send(message); 
1

В дополнение к столбам упоминанием setRequestHeader метод: кажется, что спецификации w3 для API xmlhttprequest только налагают (предлагают) ограничения для header (т. е. первый аргумент), но не для value (то есть второго аргумента).

Вот ссылка на спецификацию: http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method.

AFAIC, это означает, что любой тип данных действителен в отношении запрашиваемой передачи. Однако это не распространяется на возвращаемые данные, поскольку указаны только текст и xml.

Возможно, я ошибаюсь.