0

我正在尝试从 url 获取 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

});

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

编辑: 我的问题与如何从 AJAX 调用返回响应重复?

4

2 回答 2

2

将 async: false 放在 ajax 属性中

$.ajax({
url: "URL",
data: { param:value },
type: "POST",
dataType: "json",
async: false,
success: function(data,textStatus,jqXHR) {

 alert(data['hello']); //output: world
 result = data;

},

});
于 2013-08-28T03:40:02.953 回答
0

async虽然您可以通过将参数设置为 AJAX 请求来获得您想要的工作false,但我强烈建议您接受 AJAX 的异步特性,并在成功回调中完成您的工作。

AJAX 调用的异步特性会导致(或者更确切地说不会)导致您观察到的行为。在请求返回其数据之前,控制流继续通过调用。即 AJAX 调用后的代码继续执行,它不会等到请求完成。您可以通过设置async来强制它执行此操作false,但这也会导致在浏览器中执行的所有代码停止,直到请求返回为止。这首先违背了发出 AJAX 请求的目的。

相反,您应该习惯于在请求完成后使用回调或deferred.done来安排工作,并接受它的异步特性。需要进行一些调整才能停止程序化思考,但值得付出努力。

于 2013-08-28T03:28:08.107 回答