【发布时间】:2013-02-02 20:57:39
【问题描述】:
我正在使用 JSON 使用以下函数检索数据库中表包含的行数。
function rowCount()
{
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
datatype:"json",
type: "GET",
url: "/wagafashion/ajax/CmsRowCount.htm",
success: function(response)
{
$("#rows").val(response);
},
error: function(e)
{
alert('Error: ' + e);
}
});
}
在成功处理程序中,响应按预期到达。服务器端没有问题。
响应只是映射到 Java 的 long 类型,它表示数据库表中的行数。
我在成功处理程序中使用$("#rows").val(response); 将此响应放在id 为rows 的隐藏字段中。
使用以下 jQuery 函数提交表单时调用上述函数。
$(function() {
$('#dataForm').submit(function() {
rowCount(); //Invokes the above function that makes a JSON request.
var rows=$("#rows").val();
alert("rows = "+rows);
return false;
});
});
警告框尝试警告隐藏字段包含的值(即上述 JSON 响应)但第一次它为空。仅当我再次按下提交按钮(无需刷新页面)时,它才会提醒实际值。
还尝试将前面的函数替换为以下函数。
$(function() {
$('#dataForm').submit(function() {
rowCount(); //Invokes the first function that makes a JSON request.
var form = $(this),
url = form.attr('action'),
rows = form.find('input[name="rows"]').val();
alert("rows = "+rows);
return false;
});
});
但它也没有工作。为什么会这样?将隐藏字段的正确值检索到前面的 jQuery 函数中的方法是什么?
【问题讨论】:
-
Ajax 是异步的。您正尝试在收到响应之前访问数据。请看stackoverflow.com/questions/14220321/…。