Deferred.done 不执行链式进程
Deferred.done not execute chainable process
我读了 link https://api.jquery.com/deferred.done/
然后我编辑我的代码:如下
$.ajax(
{
type: 'Get',
dataType: 'json',
data: { id: id },
url: '@Url.Action("GetInsuranceClaim","Insurance")',
success: function (da) {
if (da.Message == "Success") {
var d = $.Deferred();
d.done($('#Cust_id').val(da.Result[0].customer_id), GetPolicy(), $('#policy_no').val(da.Result[0].policy_detail_id), console.log(da.Result[0].policy_detail_id));
d.done($('#Cust_id').val(da.Result[0].customer_id), GetPolicy(),
$('#policy_no option').val(da.Result[0].policy_detail_id),
console.log(da.Result[0].policy_detail_id));
GetPolicy() 是 ajax 调用我的问题是 ajax 调用最后执行,
我需要执行顺序
- $('#Cust_id').val(da.Result[0].customer_id)
- GetPolicy()
- $('#policy_no').val(da.Result[0].policy_detail_id)
Deferred.done()
的参数必须是函数。您当前的代码会立即执行这三个组件,并将三个结果提供给 done()
方法。
您应该将每个参数包装在 function() { } 中。然后 done
将按顺序调用每个函数。
似乎 GetPolicy() 最后执行。实际情况是它被称为第二个(在调用 done()
之前),它只是最后完成,因为它是异步的并且很长。
尝试下面的代码片段 - 注意 AJAX 调用中 return
的使用,使用它很重要,这样您就可以链接延迟。
注意: AJAX 调用也被延迟!
$.GetInsuranceClaim = function(){
return $.ajax({
type: 'Get',
dataType: 'json',
data: { id: id },
url: '@Url.Action("GetInsuranceClaim","Insurance")',
});
$.GetPolicy = function(){
//AJAX call - basically the same as the above (don't forget return)
});
$.GetInsuranceClaim().done(function(){
$.GetPolicy().done(function(policyResponse){
///logic you want to do with this response
}));
}));
我读了 link https://api.jquery.com/deferred.done/
然后我编辑我的代码:如下
$.ajax(
{
type: 'Get',
dataType: 'json',
data: { id: id },
url: '@Url.Action("GetInsuranceClaim","Insurance")',
success: function (da) {
if (da.Message == "Success") {
var d = $.Deferred();
d.done($('#Cust_id').val(da.Result[0].customer_id), GetPolicy(), $('#policy_no').val(da.Result[0].policy_detail_id), console.log(da.Result[0].policy_detail_id));
d.done($('#Cust_id').val(da.Result[0].customer_id), GetPolicy(), $('#policy_no option').val(da.Result[0].policy_detail_id), console.log(da.Result[0].policy_detail_id));
GetPolicy() 是 ajax 调用我的问题是 ajax 调用最后执行,
我需要执行顺序
- $('#Cust_id').val(da.Result[0].customer_id)
- GetPolicy()
- $('#policy_no').val(da.Result[0].policy_detail_id)
Deferred.done()
的参数必须是函数。您当前的代码会立即执行这三个组件,并将三个结果提供给 done()
方法。
您应该将每个参数包装在 function() { } 中。然后 done
将按顺序调用每个函数。
似乎 GetPolicy() 最后执行。实际情况是它被称为第二个(在调用 done()
之前),它只是最后完成,因为它是异步的并且很长。
尝试下面的代码片段 - 注意 AJAX 调用中 return
的使用,使用它很重要,这样您就可以链接延迟。
注意: AJAX 调用也被延迟!
$.GetInsuranceClaim = function(){
return $.ajax({
type: 'Get',
dataType: 'json',
data: { id: id },
url: '@Url.Action("GetInsuranceClaim","Insurance")',
});
$.GetPolicy = function(){
//AJAX call - basically the same as the above (don't forget return)
});
$.GetInsuranceClaim().done(function(){
$.GetPolicy().done(function(policyResponse){
///logic you want to do with this response
}));
}));