美好的一天, 我尝试将变量分配给Ajax请求的结果。我尝试了下面的两个请求,没有结果(得到了“未定义”的答案)。 我不明白之间的区别:
var temp = obj.method(me, you);
和
var temp = (function () {
obj.method(me, you);
})();
这是AJAX请求:
ObjID.prototype.getAjx = function(one, you){
$.ajax({
type: "post",
url: "./php/getAJX.php",
dataType: 'json',
context: this,
data: { one: one, two: two },
success: function(data) {
this.myProperty = data[0][0];
},
error:function(request, status, error) {
console.log("Something went wrong." + request.responseText + status + error);
}
});
}
是否相同? 谢谢你的帮助! :)
答案 0 :(得分:1)
你展示的前两位代码有效地做了同样的事情。
然而,他们都没有做你认为他们做的事情。他们都没有在任何地方为你的AJAX调用分配返回值:
代码的第一行:
ObjID.prototype.getAjx = function(one, you){
只是将包含实际AJAX调用的函数分配给.getAjx
的{{1}}属性。该函数不包含任何ObjID.prototype
语句,并且在执行时不会返回任何内容。这就是你得到return
的原因。
实际执行AJAX调用的代码是:
undefined
并且,您没有将该返回值分配给任何内容。如果你愿意,你需要写这样的东西:
$.ajax({
type: "post",
url: "./php/getAJX.php",
dataType: 'json',
context: this,
data: { one: one, two: two },
success: function(data) {
this.myProperty = data[0][0];
},
error:function(request, status, error) {
console.log("Something went wrong." + request.responseText + status + error);
}
});
JQuery AJAX调用 return a reference to a Promise object ,这就是你在那种情况下要存储的内容。