在jQuery / AJAX中获取函数的responseText

时间:2014-02-19 17:07:31

标签: javascript jquery ajax synchronous

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;
    }

如何获取foo的返回 responseText

使用

(在另一个jQuery事件中) var result = foo(dataString); 不起作用。

结果仍未定义。

3 个答案:

答案 0 :(得分: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
    })

答案 1 :(得分:0)

这是因为ajax是异步的,所以你不能简单地这样做。 这个问题可以通过两种方式解决

  1. 传递回调功能
  2. 使用jquery的when
  3. 传递回调

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

    希望这有帮助

答案 2 :(得分:0)

我刚刚添加了

async:false

在AJAX中

所以它将是SJAX。