返回$ .getJSON函数的结果

时间:2012-07-27 08:52:22

标签: javascript jquery ajax json

我需要加载一个带有ajax的php脚本,它会创建一个JSON结果。 getEvent.php的一个例子是:

[{"id":"1","start":"Wed Jul 18 12:00:00 GMT+0200 2012","end":"Wed Jul 18 13:30:00 GMT+0200 2012","title":"leer"}]

为了将此结果传输到另一个函数,我必须能够将它分配给变量。我尝试了很多方法,但它从未解决过。

function loadEvents(){
   var cdata;

   $.getJSON({
     type: 'GET',
     url: 'getEvent.php',
     asynch:false,
     contentType: 'application/json; charset=utf-8',
     dataType: 'json',

     success: function(jsonData) {
        cdata = jsonData;
     },
     error: function() {
       alert('');
     }

   });
   return cdata;
 }

cdata = jsonData; 似乎无法正常工作

我只找到了将结果部分(jsonData)作为变量的方法,但似乎无法返回整个jsonData。

有人能解决我的问题吗?我必须将完整的jsonData返回给另一个函数......

由于

2 个答案:

答案 0 :(得分:1)

getJSON是一个异步函数(expectiong只是一个url,没有设置对象(Docu)),这意味着它会在服务器的答案完成后立即返回结果。在此期间,您的功能将继续执行。因此,在您返回cdata时,您的成功函数尚未执行。您需要使用回调或将函数设置为同步(您尝试这样做但在那里有拼写错误 - 它是async没有h - 如果您想要传递其他设置,则不能使用getJSON()但必须使用$.ajax()

而不是使调用同步,使用回调可能是更好的解决方案:

而不是

 success: function(jsonData) {
    cdata = jsonData;
 },

写:

 success: function(jsonData) {
    workWithResult(jsonData);
 },

 // this is called the "callback" function, it is executed when the ajax-request
 // returned successfully
 function workWithResult(data){
     // now you can work with the data, which is guaranteed to exist
 }

答案 1 :(得分:1)

首先,你为什么要使用getJSON? $ .ajax似乎更符合您的要求。

其次, 返回cdata的那一刻就在服务器响应之前。一旦服务器响应,您的成功处理程序将被执行。在目前的情况下,您将无法获得所需的数据。 :)

你可以做些什么来解决这个变量cdata全局。 只需将值分配给成功处理程序中的cdata(您已经完成)

PS:将变量变为全局变量并不是一个好的编程实践。 (或者至少我不建议使用全局变量)

发布您的具体要求,例如您将以何种方式使用返回的值。这样我们就可以看到我们如何避免这种全球化的野兽。

例如:

success: function(result){
yourTargetFunction(result); // call the target function with returned data as a paramenter to it
}