2014-02-19 53 views
1
function foo(dataString){ 
     var jqXHR = $.ajax({ 
      type: "POST", 
      url: "<?php echo site_url('c_device/check_empId'); ?>", 
      data: dataString, 
      dataType: 'json', 
      cache: false, 
      success: function(data){ 
       console.log(data); 

       if(data.length == 0){ 
        return 0; 
       }  
       else{ 
        $("#error_"+tr_id).html("Emp id exists"); 
        $("#"+tr_id).css("background-color","red");     
        return 1; 
       }      
      } 

      }); 

     return jqXHR.responseText; 
    } 

?我怎樣才能返回的responseText富的獲取功能的responseText的jQuery的/ AJAX

使用

(在另一個jQuery的事件) VAR結果= FOO(dataString); 不起作用。

結果仍然未定義。

回答

1

對於你想要做的事情,最好使用回調。

var uiHelper = function() { 

    var cachedText= {}; 

    var getText = function (options) { 
     /// <summary>Returns HTML in a string format</summary> 
     /// <param name="options" type="object">options{url:The url to the file with the HTML,successCallback:function,errorCallback:function,isAsync:true||false,cache:true|false}</param> 

     function xhrSuccess() { 
      if (this.cache) { cachedText[this.url] = this.responseText; }; 

      if (this.successCallback) { 
       this.successCallback.apply(this.responseText, this.arguments); 
      } else { 
       return cachedText[this.url]; 
      }; 
     }; 
     function xhrError() { 

      if (this.errorCallback) { 
       this.errorCallback.apply(this.statusText); 
      } else { 
       return this.statusText; 
      }; 
     }; 

     if (!cachedText[options.url]) { 
      var xmlhttp = new XMLHttpRequest(); 
      xmlhttp.open("GET", options.url, options.isAsync); 
      xmlhttp.cache = options.cache || false; 
      xmlhttp.url = options.url; 
      xmlhttp.onload = xhrSuccess; 
      xmlhttp.onerror = xhrError; 
      xmlhttp.successCallback = options.successCallback || undefined; 
      xmlhttp.errorCallback = options.errorCallback || undefined; 
      xmlhttp.send(); 
     } else { 

      if (options.successCallback) { 
       options.successCallback.apply(cachedText[options.url], this.arguments); 
      } else { 
       return cachedText[options.url]; 
      }; 
     }; 
    }; 

    return { 
     getText: getText 
    }; 
}(); 

----- -----使用

var successCallBack = function() { 

} 
var errorCallBack= function() { 

} 
uiHelper.getText(
    { 
     url: 'url', 
     successCallBack: successCallBack, 
     errorCallBack: errorCallBack, 
     isAsync: true, 
     cache: false 
    }) 
+0

已編輯我的代碼,但結果仍然警告「undefined」:(@ AlumCloud.com –

+0

我仍然不知道你在說什麼先生:(哈哈。對不起。我還是新來的ajax和這個怪異的回調不會沉淪在我的大腦中@ alumcloud.com –

0

這是因爲阿賈克斯是異步的,所以你不能簡單地做這樣的。 這個問題可以從兩個方面

  1. 傳遞一個回調函數
  2. 來解決使用jQuery的使用when

傳遞迴調

function foo(dataString, callback){ 
    var jqXHR = $.ajax({ 
     type: "POST", 
     url: "<?php echo site_url('c_device/check_empId'); ?>", 
     data: dataString, 
     dataType: 'json', 
     cache: false, 
     success: function(data){ 
      console.log(data); 

      if(data.length == 0){ 
       return 0; 
      }  
      else{ 
       $("#error_"+tr_id).html("Emp id exists"); 
       $("#"+tr_id).css("background-color","red");     
       return 1; 
      } 
      callback (data);     
     } 
     }); 
} 

function foo(dataString){ 
    return $.ajax({ 
     type: "POST", 
     url: "<?php echo site_url('c_device/check_empId'); ?>", 
     data: dataString, 
     dataType: 'json', 
     cache: false 
     }); 
} 

$.when (foo (dataString)).done (function(data){ 
      console.log(data); 

      if(data.length == 0){ 
       return 0; 
      }  
      else{ 
       $("#error_"+tr_id).html("Emp id exists"); 
       $("#"+tr_id).css("background-color","red");     

      } 
      secondMethod (data); 
     }); 

希望這有助於

0

我只是說

異步:假

在AJAX所以這將是SJAX。

+0

這實際上是一種不好的做法,除非你真的需要它。 –