Ga
Ga
  • 发布:2015-03-10 01:15
  • 更新:2015-03-11 16:13
  • 阅读:5672

[报BUG]XHR在500状态下,response不填充内容

分类:5+ SDK

今早实在搞不定jQuery.post了改用mui.ajax,调试发现在服务器返回500的状态下,xhr的response没有任何内容,我的restful接口定义的就是用status code说明错误,response body返回错误信息好嘛,调试接口没一点问题,一上午发现是xhr对象不对

说激进点,你们要是搞不定xhr规范,读不懂http协议麻烦就别自己封装了,用webview内置的请求好嘛

用了两天,踩了两次这种大坑,愁人不,我还是强硬的力推用上的,弄得自己骑虎难下

-------------更新,问题代码找到了-------------------------

io.dcloud.net.NetWork 143行附近,你们真的认为只有在200状态下才需要处理服务器返回的response么?
其他状态就直接丢弃,甚至连个警告都没有

-------------昨天的提问,也没人回答,放下边了----------

请教几个问题

看了一下午也没找到问题关键点,平时看jquery代码也是看得太少,临阵磨枪差点

1.这里有个很奇怪的问题我,看api来说plus.net.XMLHttpRequest和原生的XHR对象方法/事件/接口都一致啊,为什么在jquery2.1.3的ajax封装中使用单纯把new XMLHttpRequest()换成 new plus.net.XMLHttpRequest()进行跨域访问就是不行呢,莫名其妙拿不到返回,在具体返回参数定义上的不同么?

2.我是知道plus插件中的XHR是不走webview自身的请求的,这点从chrome://inspect也能看到,里面没有请求
但是如果用mui的ajax就可以,到底这里有什么特殊处理呢?

3.jQuery的ajax封装这么多年了,应该也没什么问题啊,请指教

4.另外.为何不使用phonegap那种方式做Access-Control-Allow-Headers的封装呢?毕竟这种方式请求最终还是交给webview来处理了,应该能省不少处理的事吧,这种跨域方案本身是各大浏览器核心都在用的成熟方案,而且在安全上也更可控--举例来说我可以控制整个APP只能跨域访问自己的站点,即便被做了存储型XSS,风险相对也更小些

5.最后一个提问是,咱这个项目我听说是有开源计划的,请问什么时候开源呢?没有源码想要追上面那些问题感觉难度大了一截,虽然idea支持追踪反编的代码,但是毕竟还是难啊,而且我现在也有贡献上面说的那种Access-Control-Allow-Headers 请求本身还是走webview的跨域封装的想法,但是面对大量核心内容的黑箱其实我是有点缩了

敲完发现有点长...最后加了几个标号说明问题,没细想

2015-03-10 01:15 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

jquery 直接替换为plus.net.XMLHttpRequest应该是没问题的。但是有一个要注意的细节是:
需要在plusReady里边做替换。调用ajax请求,也需要确保是在plusReady之后。

Ga

Ga (作者) - 前后端各种语言全沾工程师

@DCloud_MUI_FXY

我是测试失败,直接替换的jquery中 new XMLHttpResquest() 版本是jQuery 2.1.3
还有你们net包下那个对response body的处理是整的我没办法了,我在公司推的东西我又不能说做半截不用,最后只能是硬着头皮拿反编的代码改了打包来用

这两天看了你们android这边net,xhr,device三个包的反编代码真是牢骚一大堆

总体架构设计思想也是挺先进了,现在这么做的基本都还是内部自己用,你们能拿来分享真的很棒,但是到了实际实施的设计和编码怎么这么愁人呢,而且这么久了还死拧着没开源,开源真的不怕代码蹉,过去那么多优秀开源项目不都让人喷编码么,赶紧开源了也能让大家参与进来,贡献代码和特性不是?

我手头现在这个就是gradle编译的5+app,完全IDE无关,因为我本人是用idea的,不喜欢eclipse,而我这个gradle编译转头很容易就能作出IDE无关的CLI,虽然现有的东西这个我也能做出来,但是现在这种完全依赖BBS的提交管理实在让人觉得有点不靠谱

还有你们现在是这几个项目一定要绑在一起么?
虽然看上去是各自独立的,但是真用起来总觉得绑定很紧,比如mui.js有不少特性都是专门针对5+SDK写的
说实话我觉得你们做一下这几个产品的隔离比较好,当然如果是你们公司发展策略问题算我没说,各家有各家的做法
但是有一点,我觉得做框架真的不要以功能实现优先来做,这样会产生太多'凑合'了

另外对你们的sdk的jar包命名也有点意见,最好能像spring一样有个统一的开头,不然依据功能增减jar包真的不好认
还有不知道你们想过把jar包上传jcenter之类的没有,这样就能用maven或者gradle进行依赖管理了,真的很方便

DCloud_UNI_FXY

DCloud_UNI_FXY

@DCloud_Android_磊子
@DCloud_App_Array

DCloud_UNI_FXY

DCloud_UNI_FXY

jQuery 2.1.3目前是不支持。因为jQuery使用了最新的xhr规范且不兼容旧规范。而plus.net.XMLHttpRequest是按照旧的规范实现的。

你可以使用jQuery1.x。后续会升级plus.net.XMLHttpRequest支持最新的xhr规范。

Ga

Ga (作者) - 前后端各种语言全沾工程师

http://ask.dcloud.net.cn/question/3589
用mui.ajax过程又来问题了
我回去试试 jQuery1.10能不能用吧...
代码质量愁死人了

话说@怎么用啊,编辑了好几次都只是纯文本
-------看懂了,@原来要放在最后-----
@DCloud_MUI_FXY

该问题目前已经被锁定, 无法添加新回复