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

我在本地apache实例( /test )的页面上调用了一个函数,该实例使用jQuery.ajax调用子页面( /test/info )并正确地进行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上,只打印'2) beforeSend' '1) prior to $.ajax''1) prior to $.ajax''2) beforeSend'日志。下一个对apache的请求是/test

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

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

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

所以上面代码的完整function版本是:

 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 );