Cocos XMLHttpRequest open方法method报错和后端接收不到request body问题

项目场景:

Cocos 编译native代码的时候,用cocos自带的xhr对象发送post请求一直不成功


问题描述:

编译的Web代码是可以直接请求的,一点问题没有,用postman请求也没问题。一开始一直报错,报的是调用C# 的lib文件的时候,在一段请求method判断的地方报了个错,没有具体原因, 报错如下

E/assert: function:open line:274

另外一个问题是,解决了之前报错后一直无法请求通

function httpPostCall(requsetUrl: string, requestData: any, requestHeaderList: Array<{ key: string, value: string }>, callback) {
    let request = new XMLHttpRequest();
    console.log("Status: Send Post Request to " + requsetUrl);
    try {
        request.onreadystatechange = function () {
            try{
                let response = null;
                if (request.readyState == 4 && (request.status >= 200 && request.status <= 400)) {
                    let httpStatus = request.statusText;
                    response = JSON.parse(request.responseText);
                    callback(true, response);
                } else {
                    callback(false, response);
                }
            }catch(e){
                cc.error(e)
            }
        };

        request.open("POST", requsetUrl, true);
        //add token
        setHeaders(requestHeaderList, request);
        request.send(JSON.stringify(requestData));
    } catch (e) {
        cc.error("Send Get Request error: ", e)
    }
}

原因分析:

第一个问题指向了一个具体文件的274行,看了下是对请求method做了判断,以为安卓对代码做了处理不允许https,但是发现自己该加的都加了。emmmm仔细看了下代码,发现从别的地方copy来的method居然是Post,C#代码里只对post和POST做了判断。。。web可能因为原生支持xhr所以是另外的代码,没有影响
第二个问题,代码是用的同一套,为什么web是好的,安卓就有问题呢?安卓这边还不能调试,直接打各种log,发现是401错误,同样的请求在web上就是好的,不解,只能老老实实在本地起一个服务debug。用的spring security发现有filter处理的时候body一直是null的,emmmm就很奇怪,因为这个path是直接filter接住的,没有进controller,调试半天决定调一个正常controller试一试,发现http 415报错,好嘛,之前一直报错401,正常的controller才报错415,在header里把

"Content-Type","application/json"

加上,终于好了。。。平时我默认认为请求都是json格式的,又学到了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值