2011-01-31 124 views
3

我们的一位工程师刚将他的iPad带到了我的面前,并显示了一个功能在我们的网站上不起作用。这适用于Chrome和Firefox,但不适用于iPhone或iPad。这是3个选择框,当你点击第一个值时,它会运行ajax并填充第二个选择框。jQuery ajax不能在iOS中工作

这是在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(''); 
      } 
     }); 
........ 
+0

您是否试过Safari/Windows? – Pointy 2011-01-31 16:42:11

+2

另外,究竟是哪里出了问题? – Pointy 2011-01-31 16:42:48

回答

8

绑定到change事件<select>的,而不是click事件。

另外,你应该为enable the Developer Console为iPad,这样你可以看到任何JS错误,可能会或可能不会发生。

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

1

我不知道什么是错的,但一般来说,这里是你可以用Mobile Safari和IE做的事情,它没有手动调试控制台。

  1. 添加一些alert()到您的代码至少找出脚本停止的时间。
  2. 您事件处理程序不会收到任何变量,但rsuccess(r)。看看文档,你会发现你可以探测的变量或alert(),这可以帮助你真正发生的事情。特别是error()处理程序。
  3. compete()处理程序将在Ajax成功失败时执行。试着去捕捉变量。
0

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

$.ajaxSetup({ cache: false });