我目前正在使用AJAX的功能,但在这种情况下,它使用多个可选嵌套ajax请求。在ajax请求成功后,我似乎无法找出执行重定向的最佳方法。所以想法是运行主要的ajax请求,并在成功函数中调用其他ajax函数。请记住,嵌套的ajax请求是可选的。所有嵌套AJAX请求成功后重定向
$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{'articleName':'" + webName + "', 'title':'" + titleContent + "', 'body':'" + content + "', 'categoryID':'" + $('.js-category-select').val() + "'}",
dataType: "json",
url: "/internal-service/service.asmx/EditBlogPost",
success: (function (data)
{
var returnVal = data.d;
//Is there extensions
if ($("[data-blog-type-id]").length > 0)
{
var extensionAry = [];
$("[data-blog-type-id]").each(function()
{
if ($(this).val() != "")
{
extensionAry.push($(this).attr("data-f-name") + "|" + $(this).val());
}
});
//Must be bookReview field extensions
//send array (if has value)
if (extensionAry.length > 0)
{
$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ articleWebname: webName, extensionAry: extensionAry }),
dataType: "json",
url: "/internal-service/service.asmx/EditBlogExtensions",
success: (function (data)
{
alert(data.d);
}),
error: (function()
{
//error
alert("ERROR!");
})
});
}
}
//Has Rating extension
if ($(".js-rating").length > 0)
{
var ratingVal = $(".js-rating").val();
$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ articleWebname: webName, rating: ratingVal }),
dataType: "json",
url: "/internal-service/service.asmx/EditBlogRating",
success: (function (data)
{
alert(data.d);
}),
error: (function() {
//error
alert("ERROR!");
})
});
}
if (returnVal != "Error updating blog post")
{
//Return the path of the article just in case the title has been changed. page uses the title to locate the article on the server
alert(returnVal + " Good job!");
}
else
{
alert(returnVal);
}
}),
error: (function() {
//error
alert("ERROR!");
})
});
在后端(C#),这是一个可插拔的体系,其中,因为我可以创建一个应用程序,然后我可以安装一个博客又具有不同的博客类型的扩展名。此外,博客系统可以有额外的插件I.E评级插件。
AJAX似乎令人担忧,可能会遇到可伸缩性问题。任何想法不胜感激。
所以问题是,如果可选的嵌套AJAX请求已被调用,我该如何等待它们完成,然后重定向(将重定向到同一页)?
简化使用jQuery承诺的代码。 将每个负载的代码分解成不同的函数,每个函数都返回它们的Ajax承诺。 然后,您可以使用'then'链接调用,或者使用'$ .when'并行运行它们。要传递复杂的结果,可以使用'$ .Deferred()'来创建一个可以用你自己的附加数据解决的特定承诺。 –
同意。这种深层嵌套是不吸引人的,难以维护。链接承诺在两方面都更好。 – Utkanos