jQuery:执行同步AJAX请求
我过去做过一些jQuery,但是我完全停留在这个上面。 我知道使用同步ajax调用的优点和缺点,但在这里它将是必需的。
远程页面被加载(用萤火虫控制),但没有显示返回。
我应该做什么不同,使我的function正常返回?
function getRemote() { var remote; $.ajax({ type: "GET", url: remote_url, async: false, success : function(data) { remote = data; } }); return remote; }
当你正在做一个同步请求,应该是
function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false }).responseText; }
示例 – http://api.jquery.com/jQuery.ajax/#example-3
请注意:将asynchronous属性设置为false将被弃用 ,并被移除( 链接 )。 包括Firefox和Chrome在内的许多浏览器已经开始在控制台中打印警告,如果你使用这个:
铬:
主线程上的同步XMLHttpRequest由于对最终用户的体验有不利的影响而被弃用。 如需更多帮助,请查看https://xhr.spec.whatwg.org/ 。
火狐:
主线程上的同步XMLHttpRequest由于对最终用户的体验有不利的影响而被弃用。 更多帮助http://xhr.spec.whatwg.org/
我真的很讨厌“我不使用它或不同意它,所以你不应该使用它”汤姆在上面的态度。 几乎和认为有害的散文一样糟糕。 这让我想起了当双方都符合标准时,基于IDE偏好的单引号和双引号的争论。
我有一个ajax问题,只能通过添加async: false,
来解决。 以浏览器挂断为借口争论这个function的弃用(和删除)是愚蠢的。 你怎么知道某人的同步ajax请求需要多长时间? 不是每个人都通过这些调用加载或传输大量数据。
我的问题是一个跟踪系统,大多数浏览器没有报告用户离开页面的时间( onbeforeunload
),但是一旦ajax请求被设置为同步,除了iOS上的Safari以及其他极其过时的Web结束浏览器。 我发送的数据量极其微不足道,只有两个整数,并且是对本地服务器的请求。 我的请求挂断根本不值得注意 ,你需要监视工具来注意。 我的同步ajax调用的替代方法是通过setInterval
函数连续调用ajax,这会大大增加服务器负载和带宽。 你不能说每当有人离开页面时,每N秒一个Ajax调用比一个更好。 你不能。
同步请求的弃用是对所有Web开发人员的惩罚,因为其中一些人不负责任地使用它。
你正在使用ajax函数。 由于它是同步的,它会像这样内联地返回数据:
var remote = $.ajax({ type: "GET", url: remote_url, async: false }).responseText;
那个url有多远? 它来自同一个域吗? 代码看起来不错
尝试这个
$.ajaxSetup({async:false}); $.get(remote_url, function(data) { remote = data; }); // or remote = $.get(remote_url).responseText;
function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false, success: function (result) { /* if result is a JSon object */ if (result.valid) return true; else return false; } }); }
检查这些
function getRemote() { //var remote; return $.ajax({ type: "GET", url: remote_url, async: false, success : function(data) { remote = data; } }); //return remote; }