繁体   English   中英

在jQuery / AJAX中获取函数的responseText

[英]Getting the responseText of the function in jQuery/AJAX

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); 不起作用。

结果仍然是不确定的。

最好对您要执行的操作使用回调。

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

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

  1. 传递回调函数
  2. 使用jQuery的时间

传递回调

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

希望这可以帮助

我刚刚添加

异步:假

在AJAX中,因此它将是SJAX。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM