我正在编写一个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问题,然后它似乎得到了纠正.如果有人有输入或解决方法,我将非常感激.谢谢阅读.
有同样的问题,感谢@KietIG提供的关于ReactJS与React Router的主题的答案- Chrome上的奇怪路由行为.
答案与CORS无关.该请求已被取消,因为Chrome已在请求中间离开了该页面.发生这种情况是因为event.preventDefault()
没有在其中一个表单提交处理程序中调用.Chrome浏览器的处理方式与其他浏览器不同.
有关详细信息,请参阅上面的答案链接.