我尝试从网址获取json响应。下面是我要求的PHP代码:
if($_POST){
header('Content-type: application/json');
echo '{"hello":"world"}';
}
以下是我写的javascript:
$('#site').change(function(){
var result;
$.ajax({
url: "URL",
data: { param:value },
type: "POST",
dataType: "json",
success: function(data,textStatus,jqXHR) {
alert(data['hello']); //output: world
result = data;
},
});
alert(result['hello']); //output: nothing (didn't alert)
alert(result); //output: undefined
});
所以,我的问题是如何将数据分配给结果?感谢。
重复答案 0 :(得分:2)
在ajax属性中输入async:false
$.ajax({
url: "URL",
data: { param:value },
type: "POST",
dataType: "json",
async: false,
success: function(data,textStatus,jqXHR) {
alert(data['hello']); //output: world
result = data;
},
});
答案 1 :(得分:0)
虽然您可以通过在AJAX请求中将async
参数设置为false
来获得您想要的工作,但我建议您接受AJAX的异步特性并简单地在成功回调。
这是AJAX调用的异步性质,它会导致(或者说不会)您观察到的行为。在请求返回数据之前,控制流程继续通过调用。这是AJAX调用继续执行后的代码,它不会等到请求完成。您可以通过将async
设置为false
来强制执行此操作,但这也会导致浏览器中执行的所有代码停止,直到请求返回为止。这首先打败了制定AJAX请求的目的。
相反,您应该习惯使用回调或deferred.done在请求完成后安排工作,拥抱它的异步性质。需要做一些调整才能在程序上停止思考,但值得付出努力。