我在下面有jQuery代码..
(function( $ ) {
$.fn.pokerClass = function( test ) {
var test;
this.a = function(){
$.ajax({
type: "POST",
url: "http://127.0.0.1/test.php",
success: function(data){
var json = $.parseJSON(data);
test = json.value;
}
});
}
this.b = function() {
alert("i am " + test);
};
this.class_var = test;
return this;
};
})( jQuery );
HTML:
var t = $(document.body).testClass();
t.a();
t.b();
我得到回应“我未定义”。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
您的ajax调用以异步方式运行,因此在执行t.b();
时,test
尚无值。
您可以同步执行ajax调用(async:false
)或在t.b();
回调中运行success
答案 1 :(得分:3)
您正在使用ajax中的 async ,这意味着系统不会等待ajax完成以继续其余操作。
只需使用
$.ajax({
type: "POST",
async:false, /* Note this */
url: "http://127.0.0.1/test.php",
success: function(data){
var json = $.parseJSON(data);
test = json.value;
}
});
答案 2 :(得分:0)
我认为您打算致电pokerClass
,而不是testClass
?
您收到警告test
已定义。它是函数的参数,您使用var test;
再次声明它。您可以删除函数参数,因为您没有将任何内容传递给函数。
为了获取 JSON数据,您发出POST
请求而不发送任何内容。请考虑使用getJSON function,但您无法使用该简写功能设置异步设置。您还可以将预期回复的dataType
设置为json
。然后自动解析。
正如Claudio Redi所说(首先):将ajax调用设置为async:false
。您可能希望查看稍微高级的.when()
函数以等待异步请求的响应。
未经测试:
(function( $ ) {
$.fn.pokerClass = function( ) {
var test;
this.a = function(){
$.ajax({
type: "GET",
async: false,
dataType: "json",
url: "http://127.0.0.1/test.php",
success: function(data){
test = data.value;
},
error: function(){
console.log("Did not work.");
}
});
};
this.b = function() {
console.log("I am " + test);
};
this.class_var = test;
return this;
};
})( jQuery );
var t = $("document.body").pokerClass();
t.a();
t.b();