我有下面的代码,它的行为方式,我不明白。在我看来,这个目的很简单,如果第一个ajax调用成功,那么从另一个ajax调用中获取loggedInUser
并将页面重新加载到创建的链接中。我的密码就像
function getLoggedInUser() {
var username = "";
$.ajax({
url: '/api/getLoggedInUser',
data: [],
dataType: 'json',
type: 'GET',
success: function(response) {
alert("a " + username);
username = response.username;
alert("b " +username);
var link = "/_marshall/rssadd/";
link = link+username;
alert("c " + link);
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
//alert("Please Try Again, we had an internal error!");
alert(err.message);
args['error'] = "1";
}
});
alert("d " + username);
return username;
}
$(document).ready(function ()
{
$("#rssCreateSubmit").click(function(event) {
var rssInfo = {}
rssInfo["title"] = $("#rssCreateTitle").val();
rssInfo["category"] = $("#rssCreateCategory").val();
rssInfo["copyright"] = $("#rssCreateCopyright").val();
rssInfo["description"] = $("#rssCreateDescription").val();
$.ajax({
url: '/api/createRSS',
data: rssInfo,
dataType: 'json',
type: 'POST',
success: function(response)
{
var loggedInUser = getLoggedInUser();
alert("e " + loggedInUser);
},
error: function(xhr, status, error)
{
var err = eval("(" + xhr.responseText + ")");
//alert("Please Try Again, we had an internal error!");
alert(err.message);
}
});
});
});
警报按此顺序打印出来,我不明白。我认为这与ajax是异步的有关,但我不太确定这意味着什么,我仍然觉得这段代码应该工作。谢谢。
"d "
"e "
"a "
"b value"
"c /_marshall/rssadd/value"
以及以下更改中的html链接,而不是重新路由:
http://www.bugbounty.design/_marshall/rsscreate/testMarshall1?rssCreateCategory=&InputEmail=
发布于 2015-11-29 06:40:45
稍微移动一下逻辑,你就可以得到这个
function getLoggedInUser() {
return $.ajax({
url: '/api/getLoggedInUser',
data: [],
dataType: 'json',
type: 'GET',
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
//alert("Please Try Again, we had an internal error!");
alert(err.message);
args['error'] = "1";
}
});
}
$(document).ready(function() {
$("#rssCreateSubmit").click(function(event) {
$.ajax({
url: '/api/createRSS',
data: rssInfo,
dataType: 'json',
type: 'POST',
success: function(response) {
getLoggedInUser().then(function(response) {
alert("a " + username);
username = response.username;
alert("b " + username);
var link = "/_marshall/rssadd/";
link = link + username;
alert("c " + link);
})
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
//alert("Please Try Again, we had an internal error!");
alert(err.message);
}
});
});
});
发布于 2015-11-29 06:30:55
Ajax调用将从主执行线程中删除。这就是为什么首先打印'd‘和'e’的原因,因为它们不在ajax调用中。
我发现这个视频对理解ajax https://www.youtube.com/watch?v=8aGhZQkoFbQ真的很有帮助。
https://stackoverflow.com/questions/33980017
复制相似问题