当前位置:  开发笔记 > 编程语言 > 正文

React/Redux + super agent,第一次调用终止

如何解决《React/Redux+superagent,第一次调用终止》经验,为你挑选了1个好方法。

我正在编写一个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问题,然后它似乎得到了纠正.如果有人有输入或解决方法,我将非常感激.谢谢阅读.



1> Drew Goodwin..:

有同样的问题,感谢@KietIG提供的关于ReactJS与React Router的主题的答案- Chrome上的奇怪路由行为.

答案与CORS无关.该请求已被取消,因为Chrome已在请求中间离开了该页面.发生这种情况是因为event.preventDefault()没有在其中一个表单提交处理程序中调用.Chrome浏览器的处理方式与其他浏览器不同.

有关详细信息,请参阅上面的答案链接.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有