【问题标题】:jQuery ajax not working in iOSjQuery ajax 在 iOS 中不起作用
【发布时间】:2017-11-06 01:47:43
【问题描述】:

我们的一位工程师刚刚将他的 iPad 带给我,并展示了我们网站上无法使用的功能。这适用于 Chrome 和 Firefox,但不适用于 iPhone 或 iPad。这是 3 个选择框,当您单击第一个中的值时,它会运行 ajax 并填充第二个选择框。

这是在 iOS 中不起作用的功能。

我们有点不知道从哪里开始测试。谁能提供一些关于从哪里开始调试的建议,或者你能看到我们做错了什么吗?

    $().ready(function () {
        $('.vehicle-search .make').bind('click', function (e) {
            var makeId = $(e.target).val();
            var container = $(e.target).parent('.vehicle-search');
            if (parseInt(makeId) > 0) {
                $.ajax({
                    url:  site.internal.url + '/lib/ajax/vehicle/make/getModelList.php',
                    type: 'post',
                    dataType: 'json',
                    success: function (r) {
                        if (r.length > 0) {
                            $('.vehicle-search > .model').html('');
                            $('.vehicle-search > .year').html('');

                            var html = '';
                            for (var i = 0; i < r.length; i++) {
                                html += "<option value='"+r[i].id+"'>"+r[i].name+"</option>";
                            }

                            $('.vehicle-search > .model').html(html);
                        } else {
                            alert('We did not find any models for this make');
                        }
                    },
                    error: function () {
                        alert('Unable to process your request, ajax file not found');
                        return false;
                    },
                    data: {
                        makeId: makeId
                        }
                });
            } else {
                $('.vehicle-search > .model').html('');
                $('.vehicle-search > .year').html('');
            }
        });
........

【问题讨论】:

标签: javascript jquery


【解决方案1】:

绑定到&lt;select&gt;change 事件而不是click 事件。

另外,对于 iPad,您应该 enable the Developer Console,以便您可以查看可能发生或未发生的任何 JS 错误。

将来,将console.log 语句放入事件处理程序中作为健全性检查,以查看它们是否被调用,以及它们是否要确定它们在什么时候失败。

【讨论】:

    【解决方案2】:

    我不知道出了什么问题,但总的来说,您可以使用没有手动调试控制台的 Mobile Safari 和 IE 来执行以下操作。

    1. 在您的代码中添加一些 alert() 至少可以找出脚本何时停止。
    2. 除了success(r) 中的r 之外,您的事件处理程序不会接收任何变量。查看文档,您会发现可以探测的变量或alert() 可以帮助您了解实际情况。尤其是 error() 处理程序。
    3. compete() 处理程序将在 ajax 成功或失败时执行。也尝试捕捉变量。

    【讨论】:

    • 控制台(例如console.log)是比alert更好的选择。
    • 是的,我几乎忘记了 iOS Safari 中有一个控制台。一想到 IE,我就很难过。
    【解决方案3】:

    问题是缓存。加上这行代码,问题应该就解决了。

    $.ajaxSetup({ cache: false });
    

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多