-1

i have jQuery code below..

(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();

I get response "i am undefined". Can anyone help me how to solve this problem?

4

3 回答 3

4

Your ajax call runs asyncronically so when t.b(); is executed, test has no value yet.

You could execute the ajax call syncronically (async:false) or run t.b(); inside success callback

于 2012-06-29T19:03:59.217 回答
3

您正在使用 ajax 的异步,这意味着系统不会等待 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; 
                            }
                    });
于 2012-06-29T19:04:37.497 回答
0
  • 我想你的意思是打电话pokerClass,不是testClass吗?

  • test您会收到已定义的警告。它是函数的参数,你用 . 再次声明它var test;。您可以删除函数参数,因为您不向函数传递任何内容。

  • 为了获取JSON 数据,您POST无需发送任何内容即可发出请求。考虑改用getJSON 函数,尽管您不能使用该速记函数设置异步设置。您还可以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();
于 2012-06-29T19:42:12.540 回答