我想知道如何通过Ajax(使用原型框架)提交表单并在“result”div中显示服务器响应。 html看起来像这样:
<form id="myForm" action="/getResults">
[...]
<input type="submit" value="submit" />
</form>
<div id="result"></div>
我尝试将javascript函数(使用Ajax.Updater)附加到“onsubmit”(在表单上)和“onclick”(在输入上)但是在函数结束后表单仍然是“非Ajax”提交(所以整个页面都被结果取代了。)
答案 0 :(得分:33)
查看原型API在Form.Request
和Event
处理的页面。
基本上,如果你有这个:
<form id='myForm'>
.... fields ....
<input type='submit' value='Go'>
</form>
<div id='result'></div>
你的js会或多或少:
Event.observe('myForm', 'submit', function(event) {
$('myForm').request({
onFailure: function() { .... },
onSuccess: function(t) {
$('result').update(t.responseText);
}
});
Event.stop(event); // stop the form from submitting
});
答案 1 :(得分:3)
您需要从ajax函数返回false值,该函数会阻止标准表单提交。
<form id="myForm" onsubmit="return myfunc()" action="/getResults">
function myfunc(){
... do prototype ajax stuff...
return false;
}
在表单上使用onsubmit还会捕获使用回车键提交的用户。
答案 2 :(得分:3)
首先需要serialize your form,然后使用Ajax Updater调用POST options并将序列化的表单数据传递给它。然后,结果将出现在您分离的元素中。
答案 3 :(得分:0)
您需要停止onsubmit
事件的默认操作。
例如:
function submit_handler(e){
Event.stop(e)
}
的更多信息