Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отправить http запрос в javaScript (https://javascript.ru/forum/misc/26752-kak-otpravit-http-zapros-v-javascript.html)

BorodinKO 20.03.2012 19:35

Как отправить http запрос в javaScript
 
Как отправить http запрос в javaScript? что бы работало на всех браузерах

devote 20.03.2012 19:41

function ajax( url, options ){

	if ( typeof url === "object" ) {
		options = url;
		url = undefined;
	}

	options = options || {};

	options.type = options.type || 'get';
	options.dataType = options.dataType || 'html';
	options.async = options.async === undefined ? true : options.async;

	var data = null;

	if ( options.data ) {
		if ( typeof options.data == "object" ) {
			for( var i in options.data ) {
				data = ( ( data == null ) ? "" : data + "&" ) + ( i + "=" + options.data[ i ] );
			}
		} else {
			data = options.data;
		}
	}

	url = url || options.url;

	url = ( url + "" ).replace( /#.*$/, "" );

	var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"),
		perhapsJSON, textStatus, error = false;

	xhr.onreadystatechange = function() {

		if ( xhr.readyState == 4 ) {

			//xhr.onreadystatechange = null;

			if ( xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 ) {

				perhapsJSON = xhr.responseText;
				textStatus = xhr.statusText || "";

				try {
					if ( options.dataType == 'json' ) {
						if ( window.JSON && JSON.parse ) {
							perhapsJSON = JSON.parse( perhapsJSON );
						} else {
							perhapsJSON = (new Function( "return " + perhapsJSON ))();
						}
					}
				} catch( _ ) {

					error = true;

					if ( options.error ) {
						options.error.call( xhr, xhr, textStatus );
					}
				}

				if ( !error ) {
					if ( options.success ) {
						options.success.call( xhr, perhapsJSON, textStatus, xhr );
					}
				}

				if ( options.complete ) {
					options.complete.call( xhr, xhr, textStatus );
				}

			} else {

				if ( options.error ) {
					options.error.call( xhr, xhr, xhr.statusText || "" );
				}
			}

			xhr = null;
		}
	}

	xhr.open( options.type, url, options.async );

	try {
		xhr.setRequestHeader( "X-Requested-With", "XMLHttpRequest" );
		if ( options.type == "post" ) {
			xhr.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		}
	} catch( _ ) {}

	xhr.send( data );

	return xhr;
}



xhr = ajax({
	url: href,
	type: "get",
	dataType: "html",
	success: function( data, textStatus, xhr ) {
	},
	complete: function( xhr, textStatus ) {
	},
	error: function( xhr, textStatus ) {
	}
});

melky 20.03.2012 19:56

new Image().src = "http://google.ru";

запрос отправлен...

dmitriymar 20.03.2012 20:04

наверное он имеет в виду как с сервера отправить без запроса с клиента.
никак-клиент инициирует всегда соединение

melky 20.03.2012 23:07

Цитата:

Сообщение от dmitriymar (Сообщение 164169)
наверное он имеет в виду как с сервера отправить без запроса с клиента.
никак-клиент инициирует всегда соединение

Цитата:

Сообщение от BorodinKO (Сообщение 164163)
Как отправить http запрос в javaScript? что бы работало на всех браузерах

нет, именно через JS.

а тут уже надо спрашивать, нужен ли ему ответ сервера и каким методом отправлять - post или get, и на свой ли домен.

если на свой домен
⌊ можно и XMLHttpRequest, с этим не спорю, см. пост devote.
а если не на свой домен - то тут уже посложнее, и без приготовлений на стороне сервера в некотором количестве случаев не обойтись.
⌊ если надо отправить методом GET
⌊ и ответ сервера не нужен
то можно сделать через картинку (см. мой пост)
⌊ если же результат с сервера нужен
то делать через JSONP или XMLHttpRequest2, насчёт второго - работает не во всех браузерах..
⌊ если же надо через POST
⌊ и результат неважен
можно сделать с помощью IFRAME и формы с атрибутом "target" :
⌊ иначе, если результат используется скриптом
XMLHttpRequest2 (опять таки, не везде), или ответный скрипт во фрейме (примесь с jsonp. тут не получилось, т.к. jsfiddle не выводил тут данные, пришедшие по POST... Вы можете убедиться в том, что там отсылается POST запрос на чужой домен с GET параметром clb и POST параметром msg во вкладке "Сеть" в инструментах разработчика в Вашем браузере.).



dmitriymar 20.03.2012 23:23

Цитата:

Сообщение от BorodinKO
Как отправить http запрос в javaScript

меня в его вопросе смущает именно "в"


Часовой пояс GMT +3, время: 22:56.