我需要加载一个带有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返回给另一个函数......
由于
答案 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
}