【发布时间】:2014-06-19 22:41:19
【问题描述】:
以下是当用户单击表单上的“保存”按钮时调用的函数。当 PreSaveAction 函数返回 true 时,表单将被提交。如果返回 false,则不会发生任何事情。我在这里使用 AJAX 调用来验证表单值,如果 validateUniqueStaff 成功,我希望 PreSaveAction 返回 true,如果失败,反之亦然。
function PreSaveAction() {
$.ajax({
url: listUrl,
type: "GET",
dataType: "json",
success: validateUniqueStaff,
error: function (data) {
alert("Error: Problem with the AJAX request");
}
});
//if (validateUniqueStaff succeeds) return true, else return false
}
我的麻烦是我不知道如何在此处合并延迟对象。我尝试过同步运行 ajax 调用,它在 Chrome 中有效,但在 IE8 中无效(要求)。
我完全被难住了。任何建议将不胜感激!如果我可以提供任何其他信息,请告诉我。
【问题讨论】:
-
那么 `validateUniqueStaff` 是什么样的?
-
您没有在此处展示您在实施 deferred 方面所做的尝试。另一个问题是为什么你甚至需要实现延迟。为什么不让成功回调启动实际的保存操作?或者更确切地说,如果您的验证发生在
validateUniqeuStaff内,则可以调用该保存操作。 -
@adeneo validateUniqueStaff 获取表单上的输入并遍历返回的 JSON 以查找匹配项
-
@MikeBrant 我无法弄清楚如何直接在表单上启动保存操作,这是在 MOSS 2010 中。这会使事情变得更简单。我觉得这至少是一个了解回调的机会。我不期待答案,但任何指导都会有所帮助!
-
@Bread 所以我想问题就在这里:为什么需要返回真/假来表示成功?您似乎想尝试在这里应用程序范例。通常在 js 中,您会看到 AJAX 成功触发 validateUniqueStaff 函数,该函数反过来可能会在成功时调用您的保存函数。在这种情况下,你为什么关心从
PreSaveAction()返回真/假?
标签: javascript jquery ajax callback deferred