我的 ajax.done 中有数据,但它在 jquery 上出现错误。 我用谷歌搜索它但找不到任何东西。
要做什么?
function select_aragement(arragament){
var arrst = arragament;
var arrsplit = arrst.split("|");
var periode = arrsplit[0];
var id = arrsplit[1];
var postsjson;
var test= $.ajax({
type: 'POST',
async: true,
url: 'ajax/prijzen.php',
data: { id: id, periode: periode },
dataType: 'json'
}).done(function (vis) {
console.log(vis);
postsjson = $.parseJSON(vis);
});
return postsjson;
}
最佳答案
您不应该尝试从回调函数返回任何内容,因为返回的值没有任何意义。相反,您只需使用该回调函数内 AJAX 请求的响应即可。
假设您有以下代码:
function bar() {
var myObject = foo();
// do something with myObject
}
function foo() {
var bar; // 1
var xhr = $.ajax({
url: yourUrl,
dataType: 'json',
type: 'post',
data: {
some: 'data'
}
}); // 2
xhr.done(function(yourObject) {
bar = yourObject; // 5
}); // 3
return bar; // 4
}
bar();
foo
函数内的注释指示这些语句的执行顺序。因此,您声明一个变量 bar
,声明一个具有 Deferred 对象的变量 xhr
,使用回调函数向其附加一个 done
处理程序,返回bar
的值,然后设置 bar
的值(太晚了 - 您已经尝试返回它)。
在执行 bar
函数时,myObject
将是未定义的,因为 foo 内
函数未在 return 语句之前设置。您需要做的只是将 bar
的值//do Something with myObject
代码移动到回调函数,并在那里使用 bar
:
function foo() {
var xhr = $.ajax({
url: yourUrl,
dataType: 'json',
type: 'post',
data: {
some: 'data'
}
}); // 1
xhr.done(function(yourObject) {
var bar = yourObject; // 4
// do something with bar
}); // 2
// 3 - function execution has finished
}
关于javascript - 返回 ajax.done 数据在 jquery 上给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193893/