1

我需要用 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 返回到另一个函数...

谢谢

4

2 回答 2

1

getJSON是一个异步函数(期望只是一个 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
 }
于 2012-07-27T08:56:20.567 回答
1

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

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

要解决这个问题,您可以做的是使变量 cdata 成为全局变量。并且只需在成功处理程序中将值分配给 cdata (您已经完成了)

PS:使变量全局化不是一个好的编程习惯。(或者至少我不建议使用全局变量)

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

例如:

success: function(result){
yourTargetFunction(result); // call the target function with returned data as a paramenter to it
}
于 2012-07-27T09:30:06.813 回答