上交国家
上交国家
  • 发布:2015-12-24 09:12
  • 更新:2017-03-13 14:41
  • 阅读:1986

(已解决)通过ajax请求回来的json对象赋值给声明的全局新对象在安卓4.4平台无效,为什么呢?

分类:MUI
var photo = new Object();  

mui.ajax(api_url, {  
                        data: {  
                            "json_str": photo_data  
                        },  
                        dataType: 'json',  
                        type: 'post',  
                        timeout: 10000,  
                        async: false,  
                        success: function(photoData) {  
                            for (index in photoData) {  
                                if (index == 0) {  
                                    continue;  
                                }  
                                photo = photoData[index];//此对象赋值方式在小米3(安卓4.4.4)、夜神模拟器(安卓4.4.2)下无效,为什么呢?  
                            }  
                            console.log(JSON.stringify(photoData)); //这里数据返回正确  
                        },  
                        error: function(xhr, type, errorThrown) {  
                            plus.nativeUI.toast("数据请求异常: "+type+"获取数据失败!");  
                        }  
                    });  
console.log(JSON.stringify(photo)); //这里打印出来结果有问题  
/*  
photoData返回的格式如下:  
{  
    "0": {  
        "status_code": "1",  
        "status_msg": "成功读取1条记录"  
    },  
    "36": {  
        "id": "36",  
        "del": "0",  
        "add_time": "1450859958",  
        "qy_id": "5",  
        "object_type": "appuser",  
        "object_id": "2",  
        "object_title": "惟美°づ",  
        "pic_src": "/uploads/qy_5/20151223/d46cfc038475f53d2c6a79c8d10f9160.jpg",  
        "title": null,  
        "description": ""  
    }  
}  
*/

如上代码,结果在海马玩模拟器(安卓4.2.2)上、三星s5(安卓5.0)上都是正确的,能打印出对象值,而在小米3及夜神模拟器中就是空的,这是为什么呢?

2015-12-24 09:12 负责人:无 分享
已邀请:
faker

faker

求结果,还有一个问题:
ajax dataType: 'json' 与dataType: 'JSON'
两种写法,前者js中返回值对象可以直接使用,后者必须用JSON.stringify(Object)
转换后,才能获取到值

  • 上交国家 (作者)

    dataType貌似新版本的mui已经不需要区分大小写了

    2015-12-24 10:39

  • 上交国家 (作者)

    已经解决了。改成使用本地存储localStorage来存放返回的json数据就没问题了。

    2015-12-26 11:53

上交国家

上交国家 (作者)

顶问题,求解决

上交国家

上交国家 (作者)

难道没人遇到这问题?

上交国家

上交国家 (作者)

已经解决,虽然也不知道为什么对象直接赋值无效,可能是部分平台内存管理原因。
改成使用本地存储localStorage来存放返回的json数据就没问题了。

maq

maq

看上去的确有点奇怪。猜测是 success 函数执行过程中出现了什么错误。有两个事情可以试试看:

  1. 在出问题的情况下,success 里面的 console.log() 有打印出东西吗?
  2. 如果前一个问题答案是否定的,就在 for 循环中的 index 前面加一个 var 试试。

怀疑是某些版本的系统中 js 是 strict 模式的。

  • 上交国家 (作者)

    都不是你说的这些问题。success出来是有结果的,for in循环index加var也是一样的。

    2015-12-28 09:32

  • maq

    有意思。如果说系统底层有 bug 的话,localStorage 出问题的可能性应该是比 js 语言本身出问题的可能性大很多。现在是 localStorage 可用,内存变量赋值反倒不行,没道理呀……

    2015-12-28 09:45

maq

maq

话说,会不会是 async:false 没起作用啊?如果存在这个 BUG 的话,倒是可以解释了。

  • 上交国家 (作者)

    也不清楚是不是同步引起。毕竟是部分平台才出现,就无法找出是什么原因了

    2015-12-28 17:20

  • maq

    针对 async:false 是否有效设计一个试验,应该不难,只要相关的现象在你认为【有问题】的环境能够稳定重现就好办。

    2015-12-29 09:11

3***@qq.com

3***@qq.com

我也遇到这问题了,感觉是async:false没有起作用,因为代码一会儿正常一会儿不正常

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