如何将query.ajax中的json响应分配给变量?

时间:2013-08-28 03:24:12

标签: php javascript jquery ajax json

我尝试从网址获取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

});

所以,我的问题是如何将数据分配给结果?感谢。

修改 我的问题与How to return the response from an AJAX call?

重复

2 个答案:

答案 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在请求完成后安排工作,拥抱它的异步性质。需要做一些调整才能在程序上停止思考,但值得付出努力。