我在一个函数内部有一个ajax调用,它在成功函数上返回一个json对象,我需要将返回的数据设置为变量,搜索答案但我找不到任何有用的答案。
方法1:
我正在调用一个函数并将返回值设置为像这样的变量
var obj = ajaxCall();
我的代码就像
function ajaxCall(){
var result;
$.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: function(data) {
// it returns json Object "data"
result = data;
}
});
return result;
}
如果我在成功回调里面记录数据我的json类似于这个
[{ collection: "Super Hero", img:"http://img_url.jpg",
heros: [{ id: "111", text: "Iron Man" },
{ id: "123", text: "Superman" },
{ id: "124", text: "Batman" }]
}]
但它没有返回值,而是返回值返回空字符串,因为返回函数不等待ajax成功函数。
方法2:
我已尝试从成功调用函数并从该函数返回值,如此
function ajaxCall(){
var result;
$.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: function(data) {
// it returns json Object "data"
callBack(data);
}
});
function callBack(data){
return data;
}
return callBack();
}
在这种情况下,函数返回值但只返回主数组(heros)中的另一个数组,而不是外部变量,如何修复它?
我尝试了上面的方法,我已经看到类似下面的东西(不知道我在哪里看到这个)将ajax结果直接设置为变量
function ajaxCall(){
var result= $.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: function(data) {
// it returns json Object "data"
result = data;
}
},(0);
}
这个方法有效吗?
如果没有,那么有没有办法将该字符串转换为结果变量并将其返回给obj?
更新
我已经尝试了this link,但是这个方法对我不起作用,如果它不适合我,那么它是如何复制的?
答案 0 :(得分:4)
使用回调
function ajaxCall(callback){
$.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: callback
});
}
ajaxCall(result => {
//do something with result
})
或承诺
function ajaxCall(callback){
return new Promise((resolve, reject) => {
$.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: resolve,
error: reject
});
});
}
ajaxCall()
.then(result => {
//do something with result
})
.catch(err => {
//or err
});
答案 1 :(得分:0)
试试这个
var obj;
$.ajax({
url: url_of_my_php_file,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: function(data) {
// it returns json Object "data"
obj = data;
}
});