我有这样的事情:
var someJSON = function(){
// Calculate some stuff here
$.ajax({
dataType: "json",
url: "http://somewebsite.com/api/?callback=?",
async: false,
success: function(data) {
return data; // How can I return this so that someJSON gets this value?
}
});
}();
console.log(someJSON); // I want someJSON to be = data from the ajax call
基本上,我希望someJSON
最终成为通过ajax返回的这个json数据的值。如何从嵌套的$.ajax
调用中返回值?我可以使用某种回调函数来传递值吗?
此外,我正在使用async: false
,以便在someJSON
设置值之前,脚本的其余部分不会尝试执行。这是正确的方法吗?
答案 0 :(得分:3)
由于您正在使用async: false
,因此您只需设置一个变量并从原始函数返回它:
var someJSON = function(){
var returnVal;
// Calculate some stuff here
$.ajax({
dataType: "json",
url: "http://somewebsite.com/api/?callback=?",
async: false,
success: function(data) {
returnVal = data;
}
});
return returnVal;
}();
但是,您应该认真考虑是否真的需要使用同步AJAX,因为这会阻止浏览器。您应该学习使用异步调用的正确方法。参见
How do I return the response from an asynchronous call?
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
答案 1 :(得分:1)
您只能通过同步Ajax调用来执行此操作:
var someJSON = function(){
// Calculate some stuff here
var retVal = null
$.ajax({
dataType: "json",
url: "http://somewebsite.com/api/?callback=?",
async: false,
success: function(data) {
retVal = data;
}
});
return retVal;
};
console.log(someJSON());
但是,请谨慎行事。一般来说,使用异步调用会更好,更安全,更快:
var someCalculatedObject = {};
function handleReturn(data)
{
// process JSON.
}
$.ajax({
dataType: "json",
url: "http://somewebsite.com/api/?callback=?",
async: true,
data:someCalculatedObject
success: handleReturn
});
答案 2 :(得分:0)
您可以尝试这样
<强> DEMO 强>
function someJSON() {
var resp = $.ajax({
dataType: "json",
url: "http://somewebsite.com/api/?callback=?"
})
.success(function (data) {
});
return resp;
};
someJSON().success(function (data) {
console.log(data);
});
希望这有帮助,谢谢。