远程页面已加载(由firebug控制),但未显示任何返回。
我应该做些什么来使函数正确返回?
function getRemote() {
var remote;
$.ajax({
type: "GET",
url: remote_url,
async: false,
success : function(data) {
remote = data;
}
});
return remote;
}
#1 楼
在发出同步请求时,该请求应为function getRemote() {
return $.ajax({
type: "GET",
url: remote_url,
async: false
}).responseText;
}
示例-http://api.jquery.com/jQuery.ajax/#example-3
请注意:不建议将async属性设置为false,并且正在被删除(链接)。如果您使用以下命令,包括Firefox和Chrome在内的许多浏览器已经开始在控制台中打印警告:
Chrome:
主线程上的同步XMLHttpRequest是不推荐使用,因为它对最终用户的体验有不利影响。有关更多帮助,请检查https://xhr.spec.whatwg.org/。
Firefox:
主线程上的同步XMLHttpRequest不推荐使用,因为它会对最终用户的体验产生不利影响。有关更多帮助,请访问http://xhr.spec.whatwg.org/
评论
注意responseText总是返回一个字符串。如果您希望使用JSON,请在$ .ajax中加上JSON.parse。
–rgajrawala
14年7月14日在14:54
注意:不建议使用xhr.spec.whatwg.org/#the-open()方法同步请求...
–teynon
15年6月24日在18:18
@Tom 和标记也是如此。我的建议:继续使用这些功能,以免它们消失。
– Stijn de Witt
15年7月24日在11:17
因为这会锁定浏览器,所以有必要在选项中添加一个超时值:5000左右。
–commonpike
2015年8月1日13:00
@usandfriends对于将字符串解析为对象,使用jQuery.parseJSON代替JSON.parse更安全。stackoverflow.com/questions/10362277/…
– AntonE
15年11月12日在8:53
#2 楼
您没有正确使用ajax函数。由于它是同步的,它将像这样返回内联数据:var remote = $.ajax({
type: "GET",
url: remote_url,
async: false
}).responseText;
#3 楼
该网址有多远?是来自同一个域?代码看起来还不错尝试一下
$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;
评论
是的相同的域和所有内容。正确定义了remote_url,并按照上述方式正确执行了AJAX调用(由firebug控制)。只是没有回报!
–工业
2011年7月13日在20:35
#4 楼
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;
}
});
}
评论
请提供一些有关为什么这将有助于OP的解释。
–磷虾
2014年11月20日18:53
从服务器端返回json对象是一个好习惯。它给您更多的控制权。但是,您需要在上面的$ .ajax参数中添加dataType:“ json”。
– jjwdesign
15年5月22日在12:24
这是什么意思:“它给您更多控制权”?
– grantwparks
18年1月1日在14:36
不相关,但是您可以:return result.valid; //这已经是布尔值
– dpineda
18年5月9日在16:27
评论
您的代码看起来不错。返回的是什么?有js错误吗?我觉得这很具有讽刺意味-您在问如何同步执行“异步JavaScript和XML”操作。您真正需要执行的是“ SJAX”。
注意:规范已开始弃用同步AJAX请求。
似乎“将需要[synchronous]”语句表明对JavaScript引擎缺乏了解,因此应用程序架构不佳。我想了解是否确实需要同步。
@pmont似乎声明“将需要[synchronous]”表示缺乏对JavaScript引擎的理解,因此架构欠佳。或一个很好的理解:如果要在onbeforeunload上进行AJAX调用,则实际上建议使用同步请求(因为浏览器窗口在请求返回之前会消失)。无论如何,他清楚地说:“我知道使用同步ajax调用的利弊” ...也许只是相信他?