Javascript 返回$.getJSON函数的结果

Javascript 返回$.getJSON函数的结果,javascript,jquery,ajax,json,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;

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


感谢

getJSON
是一个异步函数(只需要一个url,不需要设置对象()),这意味着它将在服务器完成应答后立即返回结果。同时,您的函数将继续执行。因此,当您返回cdata时,您的成功函数尚未执行。您需要使用回调或将函数设置为同步(您正在尝试执行此操作,但其中有一个输入错误-它是不带h的
async
)。此外,如果要传递其他设置,您不能使用
getJSON()
,但必须使用

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

而不是

 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
 }

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

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

您可以做的是将变量cdata设置为全局变量。 只需在success handler中为cdata分配值(您已经这样做了)

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

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

例如:

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

您将
async
拼错为
asynch
。而且,由于您传递的是
设置
对象,因此您应该使用
url
@JonathanLonowski,而不是期望url。@JonathanLonowski您的评论在sirYup当天获胜,如果cdata未定义,这可能是原因感谢您的回答。它帮助我理解了这个问题,也解决了这个问题!=)