我正在编写一个 react-redux 应用程序,我正在使用 superagent 在我的中间件中进行一些服务调用。我发现了一个非常奇怪的行为,对我的搜索 api 的第一次调用总是被终止。我尝试在拨打第一个电话之前等待 10-30 秒,并记录整个过程中的每一步,但我似乎无法确定为什么会发生这种情况。
我的动作创建者看起来像
export function getSearchResults(searchQuery) {
return {
query: searchQuery,
type: actions.GO_TO_SEARCH_RESULTS
}
}
它在这里击中了中间件逻辑:
var defaultURL = '/myServer/mySearch';
callPendingAction();
superagent.get(defaultURL)
.query({query: action.query})
.end(requestDone);
//sets state pending so we can use loading spinner
function callPendingAction() {
action.middlewares.searchIRC.readyState = READY_STATES.PENDING;
next(action);
}
//return error or response accordingly
function requestDone(err, response) {
console.log("call error", err);
const search = action.search;
if (err) {
search.readyState = READY_STATES.FAILURE;
if (response) {
search.error = response.err;
} else if (err.message) {
search.error = err.message;
} else {
search.error = err;
}
} else {
search.readyState = READY_STATES.SUCCESS;
search.results = fromJS(response.body);
}
return next(action);
}
即使呼叫终止,查询也是正确的,我收到此错误消息:
Request has been terminated
Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.
at Request.crossDomainError (http://localhost:8000/bundle.js:28339:14)
at XMLHttpRequest.xhr.onreadystatechange (http://localhost:8000/bundle.js:28409:20)
看起来页面也每次刷新。
我似乎找不到任何关于为什么会发生这种情况的线索,第一次调用失败似乎无关紧要,但是在第一次终止调用之后就可以了。将不胜感激任何输入,谢谢!
更新:所以这似乎与 chrome 有关,我在Version 47.0.2526.80 (64-bit)
. 这个应用程序是另一个应用程序中的 iframe,我相信这会导致 chrome 出现问题,因为当我在 Firefox 中尝试这个时,没有问题。奇怪的是只有第一个调用给出了 CORS 问题,然后它似乎在此之后得到纠正。如果有人有意见或解决方法,我将不胜感激。谢谢阅读。