jQuery&的异步问题使用Javascript

时间:2014-05-06 15:12:16

标签: javascript json asp.net-mvc-3 asynchronous synchronous

我正在围成一圈,似乎无法从Stack或Google目前可用的资源中找到解决方案。我必须要有一些显而易见的东西,也许你可以提供帮助吗?

故事摘要:

  • 点击时启动javascript函数,并在我们的数据库中创建新联系人。
  • 成功创建后会调用其他功能,以根据需要切换一些设置,具体取决于几个复选框。
  • 当前正在异步调用,导致只有最后一次函数调用才能成功更新联系人。
  • 在我的生活中,我不能一个接一个地接到工作的电话。
  • 每次调用都会在成功完成后返回一个JsonResult,如果这有帮助的话(需要应用程序的其他区域。

代码目前看起来像是: 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

2 个答案:

答案 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函数链接回调...所以我将每个状态的值转换为字符串数组并在控制器中解析它!

感谢您的帮助:)