首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XHR onreadystatechange从不触发

XHR onreadystatechange从不触发
EN

Stack Overflow用户
提问于 2015-07-27 00:43:15
回答 1查看 708关注 0票数 2

我有一个AMD模块,做基本的Ajax张贴。它正在工作,它将发布到我的服务器api,但是onreadystatechange事件不会触发。你能看出来我做错了什么吗?

代码语言:javascript
复制
define(['constants'], function (cons) {
    'use strict';

    function _getHTTPObject () {
        var http = false;
        // Use IE's ActiveX items to load the file.
        if (typeof ActiveXObject !== 'undefined') {
            try {http = new ActiveXObject("Msxml2.XMLHTTP");}
            catch (e) {
                try {http = new ActiveXObject("Microsoft.XMLHTTP");}
                catch (E) {http = false;}
            }
        // If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
        } else if (XMLHttpRequest) {
            try {http = new XMLHttpRequest();}
            catch (e) {http = false;}
        }
        return http;
    }

    function _send (url, params, cbSuccess, cbError) {
        var http = _getHTTPObject();
        http.open("POST", url, true);
        // Send the proper header infomation along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.onreadystatechange = function (cbSuccess, cbError) { 
            if (http.readyState === 4 && http.status === 200) {
                if (console) { console.log('xhrPost response:', http.responseText); }
            }
        }
        http.send(params);
    }

    return {
        send: _send
    };

});
EN

回答 1

Stack Overflow用户

发布于 2015-07-27 07:38:29

好的..。因此,在对javascript进行了大量的修改之后,我终于看到了问题所在。我测试的服务器api post路由没有在成功时返回响应,只是在出错时返回,所以它花了很长时间才能看到这一点。

所以上面的代码很好用:-/

如果任何人感兴趣,这里是服务器节点路由代码。我必须在玩家保存成功后添加return res.json(...行,才能触发正确的readyState……

代码语言:javascript
复制
app.post('/api/player/create', function (req, res) {
    var player = new Player({
            'firstName': req.body.firstName,
            'lastName': req.body.lastName,
            'handle': req.body.handle,
            'email': req.body.email
        });
    player.save(function (err) {
        if (!err) {
            log.logOK('New player joined! (%0)', req.body.handle);
            return res.json({ 'error': '' }); // <== This was missing
        } else {
            log.logER('Create new player failed, error (%0): %1', req.player.handle, err);
            return res.json({ 'error': err });
        }
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31639448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档