Результаты запроса Ajax в форме также
Вопрос
Как видно из заголовка, мой вызов Ajax фактически заставляет форму отправляться в действие по умолчанию, почему? Я никогда не сталкивался с этим раньше, все остальные мои Ajax-вызовы никогда не делали этого.
function newAjax(t,u){ //t = type(post/get), u = url var resource = null; if (window.ActiveXObject) { resource = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { resource = new XMLHttpRequest(); resource.overrideMimeType('text/html'); } resource.open(t,u,false); resource.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); return resource; } function send_newsletter(){ formObj = document.getElementById("news_form"); var inputs = formObj.getElementsByTagName("INPUT"); var parameters = ""; for(i = 0; i < inputs.length; i++){ parameters += inputs[i].name+"="+encodeURI(inputs[i].value); if(i != inputs.length-1){ parameters += "&"; } } var url = "whereitshouldbegoing.com"; var ajax = newAjax("POST",url); ajax.onreadystatechange = ajaxResult; ajax.setRequestHeader("Content-length", parameters.length); ajax.setRequestHeader("Connection", "close"); ajax.send(parameters); }
Все это прекрасно работает вплоть до строки .send, которая является ошибкой, вызывающей отправку формы (я также не представляю, действительно ли запрос ajax завершается).
Функция send_newsletter вызывается из типа ввода = " изображение " элемент с onclick = " send_newsletter () "
Пожалуйста, не говорите мне использовать jQuery или другую библиотеку, как бы мне этого ни хотелось, мы не можем использовать какие-либо внешние библиотеки, корпоративные правила и все такое.
Решение
Ввод типа " изображение " будет работать так же, как кнопка отправки , Используйте ввод типа кнопки или кнопки для запуска вашего метода.
<input type="button" onclick="send_newsletter()" value="Send" />
<button onlclick="send_newsletter()">... </button>
<a href="#" onclick="send_newsletter(); return false;"><img src="... /></a>
Другие советы
Вы используете кнопку отправки для вызова send_newsletter
?
onreadystatechange
функция обратного вызова 'ajaxResult'
не вызывается, потому что вы делаете синхронный вызов на сервер:
resource.open(t,u,false);
если вы хотите, чтобы ajaxResult
вызывался, измените его на:
resource.open(t,u,true);
сейчас это то, что я вижу. Вы должны предоставить больше информации, например, как вы вызываете send_newsletter
?
РЕДАКТИРОВАТЬ :( после комментария автора)
INPUT
типа image
является графической кнопкой отправки .