Javascript 单击按钮时发出AJAX请求
首先,我不太熟悉JQuery和AJAX。我通过尝试在网上找到的所有东西,得出了以下代码,老实说,我并不完全理解这些代码 我希望显示一个引导模式,当单击按钮时,它包含来自数据库的记录。 我的问题是,当页面加载时,它已经打开了模式,而不是单击按钮Javascript 单击按钮时发出AJAX请求,javascript,jquery,ajax,twitter-bootstrap,Javascript,Jquery,Ajax,Twitter Bootstrap,首先,我不太熟悉JQuery和AJAX。我通过尝试在网上找到的所有东西,得出了以下代码,老实说,我并不完全理解这些代码 我希望显示一个引导模式,当单击按钮时,它包含来自数据库的记录。 我的问题是,当页面加载时,它已经打开了模式,而不是单击按钮 <button id="modalData">Load Modal</button> <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-l
<button id="modalData">Load Modal</button>
<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Plantilla</h4>
</div>
<div class="modal-body">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Item Code</th>
<th>New Item Code</th>
<th>Position</th>
<th>Station</th>
</tr>
</thead>
<tbody>
<c:forEach var="plantilla" items="${sessionScope.plantilla}">
<tr>
<td><c:out value="${plantilla.getItemCode()}"/></td>
<td><c:out value="${plantilla.getNewItemCode()}"/></td>
<td><c:out value="${plantilla.getPosition()}"/></td>
<td><c:out value="${plantilla.getStation()}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</div>
这是我的Servlet:
PlantillaViewDao dao = new PlantillaViewDao();
List<PlantillaView> plantilla = dao.read();
HttpSession session = request.getSession();
session.setAttribute("plantilla", plantilla);
$。当执行您的方法时。。。这就是为什么它会显示在pageload上
function loadPlantilla() {
$.ajax({
url: './TryAjax',
type: 'POST'
}).done(function() {
$('#modal').modal('show');
});
}
你必须这样做
或者,如果您真的想使用$。可能是因为您收到了多个类似这样的ajax调用:
$("#modalData").click(function() {
$.when(loadPlantilla(), method2(), method3()).done(function() {
$('#modal').modal('show');
});
});
您正在立即调用函数,而不是传递引用
$("#modalData").click(loadPlantilla);
还可以根据您的ajax请求使用.done:
function loadPlantilla() {
$.ajax({
url: './TryAjax',
type: 'POST',
error: function() {
alert('Ajax readyState: ' + xhr.readyState + '\nstatus: ' + xhr.status + ' ' + err);
}
}).done(function() {
$('#modal').modal('show');
});
}
快速查看此项。$。当执行方法时。。。这就是为什么它会显示在PageLoad上,我只有一个ajax调用。我不知道什么时候可以进行多个ajax调用。正如我所说,我刚刚开始学习JQuery和AJAX。我已经用您建议的方法替换了loadPlantilla方法,它不再显示加载模式。但问题是当我点击按钮时。它似乎不起作用。我编辑了我的代码。实际上,您应该再次考虑错误代码。如您所见,有3个参数被传递到函数类型:函数jqXHR jqXHR、字符串textStatus、字符串ERRORSHORN;没有?它似乎在页面加载时调用了该方法,因为您正在传递一个引用—它是一个回调方法。单击链接时会调用它。执行该方法,以便传递该方法的返回值。
function loadPlantilla() {
$.ajax({
url: './TryAjax',
type: 'POST',
error: function() {
alert('Ajax readyState: ' + xhr.readyState + '\nstatus: ' + xhr.status + ' ' + err);
}
}).done(function() {
$('#modal').modal('show');
});
}