【发布时间】:2014-05-26 10:11:36
【问题描述】:
我使用 jquery 通过 ajax 请求检索我用来填充输入字段的一些值。 检索这些字段后,我需要在另一个 ajax 调用中使用它们的新值,但我发现我得到了在我的 ajax 调用之前字段中的值。
$("#clickme").function(e) {
e.preventDefault()
retrieveValues()
compareValues()
}
function retrieveValues {
paramList = {}
..... snip .....
$.ajax({
url: myControllerAction,
type: "POST",
dataType: "json",
data: JSON.stringify(paramList),
contentType: "application/json; charset=utf-8",
success: function (result) {
$("#myFieldOne").val(result["myFieldOne"]);
$("#myFieldOne").val(result["myFieldOne"]);
$("#myFieldThree").val(result["myFieldThree"]);
}
},
error: function () {
alert("error");
}
});
function compareValues {
paramList = {}
paramList["myFieldOne"] = $("#myFieldOne").val();
paramList["myFieldTwo"] = $("#myFieldTwo").val();
paramList["myFieldThree"] = $("#myFieldThree").val();
paramList = {}
..... snip ....
$.ajax({
url: myOtherControllerAction,
type: "POST",
dataType: "json",
data: JSON.stringify(paramList),
contentType: "application/json; charset=utf-8",
success: function (result) {
.....
some Business Logic
.....
}
},
error: function () {
alert("error");
}
});
}
在点击“clickme”之前我有
<input name="myFieldOne" id="myFieldOne" value="default value #1">
<input name="myFieldTwo" id="myFieldTwo" value="default value #2">
<input name="myFieldThree" id="myFieldThree" value="default value #3">
并且函数 retrieveValues 应该用新值“New Value #1”、“New Value #2”、“New Value #3”设置这三个字段。
从retrieveValues() 返回后,我调用了compareValues(),但是Jquery 对象仍然包含默认值。我似乎只有在点击事件结束后才实际更改字段值。 函数 compareValues() 在第一次点击时发送错误的数据,值比较错误,然后如果我再次点击“clickme”,则比较正确。
有什么方法可以纠正这个问题并让 jquery 即时识别我在输入字段中的新值?
弗朗切斯科
【问题讨论】:
-
Ajax 是异步的,一旦 ajax 完成,您应该调用
compareValues(),例如从 ajax 成功回调中调用它 -
ajax 调用是异步的。因此,当您运行
compareValues时,来自retrieveValues的 ajax 调用尚未完成,因此您仍会在字段中看到旧值。
标签: jquery ajax input-field