jQuery.ajax重新加载页面而不是在iOS上的Safari中执行ajax请求

时间:2013-07-16 18:06:53

标签: ios ajax jquery

我在本地apache实例(/test)上的页面上调用了一个函数,该实例使用/test/info调用子页面(jQuery.ajax)并正确地进行AJAX调用并动态加载来自FF,Safari,Chrome桌面响应的内容,但在iOS模拟器中,没有进行任何通话,页面也会刷新。

window.getInfo = function ( event ) {
  console.log('1) prior to $.ajax');
  $.ajax({
    url: 'http://localhost/test/info',
    dataType: 'html',
    beforeSend: function(xhr) { 
      console.log('2) beforeSend'); 
    },
    success: function(data, textStatus) {
      console.log('3) success');
      if ( textStatus == 'success' ) {
        // doing stuff with data
      }
    }
  }).always( function() { console.log('4) always'); });
};

从桌面浏览器打印所有日志,我的apache服务器在/test报告请求,但在iOS模拟器中的Safari上,只有'1) prior to $.ajax''2) beforeSend'日志是打印,下一个对apache的请求是/test

有没有人知道这里发生了什么,以及如何让iOS表现自己?

更新:当我将async: false属性添加到ajax调用时,将打印所有日志,并发出请求,以便基本解决问题;但是页面仍然重新加载,我认为这是与iOS上的事件传播相关的另一个问题。

1 个答案:

答案 0 :(得分:4)

使这项工作所需要的只是来自处理函数的return false;。有关更完整的解释,请参阅event.preventDefault() vs. return false,但基本上jQuery事件处理程序中的“return false实际上与在传递的jQuery.Event对象上调用e.preventDefault和e.stopPropagation相同。”< / p>

上面代码的完整功能版本是:

getInfo = function() {
  $.ajax({
    url: '/test/info',
    dataType: 'html',
    success: function(data, textStatus) {
      if ( textStatus == 'success' ) {
        // doing stuff with data
      }
    }
  });
  return false;
};

// The order of vv that string may be important
$(document).on('click touchend', '.getInfo', getInfo );