Я хочу загрузить часть страницы с помощью JQuery ajax.
url - это запрос действия Struts2.
$("#accountListDiv").html(ajax_load).load(url, $("#testform").serializeArray(), function(){
//alert('done');
});
//serializeArray и сериализация не работают. (Возможно, действие struts действительно ожидает данные в том формате, в котором они генерируются этими функциями. Будет полезно получить больше информации по этому вопросу).
В случае обычного HTTP-запроса всем переменным в действии Struts2 будут автоматически присвоены значения, введенные на странице JSP.
Я хочу сделать то же самое при использовании Ajax. Я не хочу явно передавать каждый параметр в такой форме.
$("#indexDiv").html(ajax_load).load(url, "rateTypeId4Index="+rateTypeId4Index, function(){
xyz();
});
Я знаю, что для struts есть плагин Dojo, но он устарел. И если я смогу решить эту проблему с помощью JQuery, то мне этого более чем достаточно.
(Я ищу решение, которое не требует использования плагина JQuery-struts).
Ответ 1 · Vasily Komarov
1 У вас проблема с отправкой запроса, а не в части Struts2. Попробуйте установить карту параметров вместо строки.
$("#accountListDiv").html(ajax_load).load(url, {'param1':value1, 'param2':value2}, function(){
//alert('done');
});
2 Если вы хотите отправить форму с помощью ajax, используйте плагин Jquery Form.
$("#testform").ajaxSubmit({
type: "POST",
success: function(data) {
$('#accountListDiv').html(data);
alert('Yeh-ha!');
},
error: function(request, textStatus, errorThrown) {
alert('Oops');
}}
);
Ответ 3 · rees
Я использовал следующее с JQuery и Struts2:
<script>
function bindDivFormSubmission(theDiv) {
/* get the form from the div and unbind it */
var theForm = theDiv.find('form');
theForm.unbind();
/* attach a submit handler to the form */
theForm.submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
var url = theForm.attr( 'action' ),
formData = theForm.serialize();
/* Send the data using post and put the results in a div */
$.post( url, formData,
function( data ) {
theDiv.html( data );
bindDivFormSubmission(theDiv);
}
);
});
}
var accountListDiv = $("#accountListDiv");
bindDivFormSubmission(accountListDiv);
</script>
Вы можете заметить, что он рекурсивно вызывает "bindDivFormSubmission(theDiv);" после замены div. Это произошло потому, что в моем использовании div заменяется другой формой, которую необходимо связать.