我有一个浏览器应用程序,它在加载特定页面时向服务器发出 ajax 请求以获取一些 JSON 数据。返回后,ajax 请求被处理,一切都很好。
我正在调用的服务器目前有一些烦人的间歇性问题,特别是随机导致我的 ajax 调用的响应不返回任何内容而不是 JSON。这个特定页面的有用性依赖于从这个 ajax 调用正确返回的数据,因此在某些情况下它没有按预期返回的事实导致我的用户(因此,我!)出现问题。
现在,如果我再次进行完全相同的调用,在初始调用返回错误响应之后,服务器将立即返回正确响应!
我不想涉及服务器问题,它们目前正在解决中,但我还没有时间表确定何时完成。因此,在解决服务器问题的同时,我想在我的 ajax 请求中加入某种捕获,以处理服务器返回错误响应的时间,然后立即再次进行完全相同的调用。请注意,这只是阻止我的用户抱怨的短期修复,直到服务器问题得到解决!
我目前拥有的与此类似:
$.ajax({
type: "GET",
data: data,
success: function(data, textStatus, jqXhr){
// Do stuff...
}
});
当服务器抛出一个摆动时,data
它会以未定义的形式返回。所以我真正想做的是测试是否data
是undefined
,如果是的话,重新对同一个ajax请求进行相同的调用(我所做的每个测试都显示第二次收到了正确的响应!)。
所以,对我来说,这感觉像是未定义测试中声明(喘气,震惊,恐怖!!!)的一个很好的用例,Goto
但是,我什至不确定你可以在 JS 中做到这一点,而且,我知道它们的用途是被认为是非常糟糕的做法。
我知道有几种方法可以解决它,例如:
我可以将调用放入
while(wasAjaxCallSuccessful){}
循环中,将我的 ajax 请求设置为同步,并且仅将wasAjaxCallSuccessful
变量设置为 true 如果data
返回为 notundefined
。但这感觉和使用 Goto 语句一样糟糕(如果允许的话)。另一种选择是在我的
data == undefined
测试中重复调用 ajax 请求。但同样,这也感觉不对。
所以我想知道什么被认为是处理这种情况的最合适的方法,尽管这很不寻常,场景?