我正在围成一圈,似乎无法从Stack或Google目前可用的资源中找到解决方案。我必须要有一些显而易见的东西,也许你可以提供帮助吗?
故事摘要:
代码目前看起来像是:
function CreateClicked(){
Contact.Create(**bunch of params**, function(data){
if(data.success) {
togglePrimary(data.newId);
toggleBilling(data.newId);
toggleTechnical(data.newId);
toggleBalance(data.newId);
toggleSecurity(data.newId);
toggleMarketing(data.newId);
Modal.Load(**loads a modal view**);
}
}
}
切换功能如下所示:
function togglePrimary(id) {
if ($("#contact_admin_primaryrole").prop('checked'))
{Contact.TogglePrimaryRole(id);}
}
调用一个如下所示的控制器函数:
public JsonResult TogglePrimaryRole(int contactId){
try{
var c = new Contact(contactId);
c.IsPrimaryContact = !c.IsPrimaryContact;
c.Update(AuthenticatedUser.Username, !c.IsPrimaryContact);
return Json(JSONResponseFactory.SuccessResponse("Contact updated successfully"));
}
catch (Exception ex){
return Json(JSONResponseFactory.ErrorResponse(ex.Message));
}
}
我应该如何进行设置,以便每个切换功能在上一个切换功能完成之前不会启动并返回Json响应,无论成功与否?
有什么想法吗?
干杯, DEZ
答案 0 :(得分:1)
使用jQuery promises应该有所帮助:
togglePrimary(data.newId).then(toggleBilling(data.newId)).then(toggleTechnical(data.newId)
等
仅当最后一个功能成功时才会运行下一个功能。如果你想调用函数无效的结果,那么使用always()而不是then()
togglePrimary(data.newId).always(toggleBilling(data.newId)).always(toggleTechnical(data.newId)
这将需要引用jquery 1.6或更高版本。要从CDN中引用,请添加以下内容
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
答案 1 :(得分:0)
我似乎无法使用promises,或javascript函数链接回调...所以我将每个状态的值转换为字符串数组并在控制器中解析它!
感谢您的帮助:)