$.getJSON 不适用于 Android 移动设备

Posted

技术标签:

【中文标题】$.getJSON 不适用于 Android 移动设备【英文标题】:$.getJSON not working on Android mobile devices 【发布时间】:2016-07-05 06:29:12 【问题描述】:

使用本地文件 JSON,我通过 $.getJSON 获取数据并使用 jQuery mobile 输出

$('body').off('tap').on('tap', 'ul li', function(event) 
    var jqxhr = $.getJSON("one.json", function(data) 
        console.log("success");
        alert(data.name + " " + data.one);
        $("#json").html(data.name + " " + data.one);
    ).done(function() 
        console.log("second success");
        $("#d1").html("second success");
    ).fail(function(jqxhr, textStatus, error) 
        var err = textStatus + ', ' + error;
        console.log("Request Failed: " + err);
        $("#d2").html("Request Failed: " + err);
    ).always(function() 
        console.log("complete");
        $("#d3").html("complete");
    );
);

这在计算机和 HTC 上运行良好,但在三星设备上却无法运行。在三星没有错误,输出空div

【问题讨论】:

如果您检查传递给fail() 处理程序的参数,您将获得更多信息。目前,鉴于您的问题缺乏细节,我们所能做的就是告诉您如何调试问题,而不是如何实际解决它。 在三星不是error,输出为空div 鉴于您的代码,似乎不可能有一个空的 div 结果,除非 ajax 请求甚至没有启动。 这个问题只有samsumg.android 4.2.1 ajax 请求是否被发送?如果你不能回答你还没有调试足够。 【参考方案1】:

阅读上面的 cmets,我相信您的代码实际上可能在一台设备上运气好,而在更多设备上失败。

您使用的“on tap”看起来无效(并且它的使用确实带有警告,因此有限制)。 http://api.jquerymobile.com/tap/

警告:小心使用水龙头

Tap 使用 vclick,因此应谨慎使用 触摸设备。有关详细信息,请参阅vclick API documentation。

根据我的理解,在点击之后,应该会出现功能 - 不引用任何特定的标签。请注意上面代码中的第一行与下面的代码之间的区别。

$('body').off('tap').on('tap', function(event) 

    var jqxhr = $.getJSON("one.json", function(data) 
        console.log("success");
        alert(data.name + " " + data.one);
        $("#json").html(data.name + " " + data.one);
    ).done(function() 
        console.log("second success");
        $("#d1").html("second success");
    ).fail(function(jqxhr, textStatus, error) 
        var err = textStatus + ', ' + error;
        console.log("Request Failed: " + err);
        $("#d2").html("Request Failed: " + err);
    ).always(function() 
        console.log("complete");
        $("#d3").html("complete");
    );
);

【讨论】:

我看到一个与我的***.com/questions/14191338/… 类似的问题,但在 API 中有问题 定义处理程序?你是说选择器吗?您已将事件绑定到正文。如果你想将它绑定到 ul li,那么像 $("ul > li").on("tap", function.....);您需要在使用之前阅读如何使用 tap,否则您将依赖代码而不知道限制,直到您或您的一位用户旅行。 我做了按钮$('#test').on('tap', function(event) );。再次htc和pc工作,三星不工作。 听起来你遇到了设备或安卓版本相关的问题。您是否像我之前建议的那样阅读了 jquery 移动页面,以及关于在触摸设备上使用点击的警告?【参考方案2】:
if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN)
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);

【讨论】:

以上是关于$.getJSON 不适用于 Android 移动设备的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 代码不适用于移动设备(Android)

Buildfire:buildfire.geo.getCurrentPosition 不适用于移动应用(android 和 ios)和 PWA

iScroll - 保留原生垂直滚动 - 适用于 iOS,不适用于 Android

在视口中检测元素不适用于移动 Safari

底页不适用于谷歌地图

HTML Canvas 线条透明度不适用于移动 Safari