我的html页面中有5个选择列表。所有选择列表都使用来自ajax调用的json响应动态填充。在ajax成功函数中,我需要为每个选择列表设置一个值。
但是对于不同的选择列表不同的时间,选择列表的值的变化是随机的。我尝试了几种方式,我发现jQuery正在执行下一行,当需要时间来更改值并且永远不会转到上一行。
我尝试了change()函数,ready()函数,load()函数等没有成功。我需要等到上一个选择列表值发生变化。我怎样才能做到这一点。这是我的示例代码。
var jsonParam = '';
var serviceURL = "./someurl";
AjaxManager.SendJson(serviceURL, jsonParam, onSuccess, onFailed);
function onSuccess(jsonData) {
$('#cmb1').val(jsonData.Field1);
$('#cmb2').val(jsonData.Field2);
$('#cmb3').val(jsonData.Field3);
$('#cmb4').val(jsonData.Field4);
$('#cmb5').val(jsonData.Field5);
}
答案 0 :(得分:0)
我认为你要找的是.then()
,答案可能在这里:
jQuery deferreds and promises - .then() vs .done()
答案 1 :(得分:0)
我不知道,这个AjaxManager是什么东西。在jQuery中,您可以使用deferred.then()
并将链接链接起来。
所以你的脚本应该是这样的:
var jsonParam = '';
var serviceURL = "./someurl";
$.get(serviceURL, jsonParam, function (jsonData) {
$('#cmb1').val(jsonData.Field1);
}).then(function () {
$('#cmb2').val(jsonData.Field2);
}).then(function () {
$('#cmb3').val(jsonData.Field3);
}).then(function () {
$('#cmb4').val(jsonData.Field4);
}).then(function () {
$('#cmb5').val(jsonData.Field5);
}).fail(function {
//Here comes to fail
});
请注意,我使用了$.get
方法。如果您需要通过post
将参数传递给ajax,则只需将$.get
更改为$.post
。
多数民众赞成。当$.get
获得响应时,响应将在您的jsonData
变量中,并更新#cmb1
值,然后更新第二个,依此类推。最后,如果您的ajax调用失败,则调用fail
方法。
修改强>
正如您所提到的,您会收到错误:
未捕获的TypeError:$(...)。val(...)。然后不是函数
您是否在页面上导入了jQuery库?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>