【问题标题】:Getting a function's name in jQuery在 jQuery 中获取函数的名称
【发布时间】:2014-12-08 04:17:29
【问题描述】:

我正在与jQuery 合作。我有一个场景,我有一个回调方法/函数被两个不同的函数/方法调用。

问题:如何在我的回调方法/函数中知道这两个函数/方法中的哪一个调用了我的回调方法/函数?因为我有一些变量,我想根据调用回调的方法/函数来分配一些值。

示例代码

var One = "";
var Two = "";

function first(){
    var urlink = "https://192.168.150.3/api1?jsonpCallback=myCallback";
    $.ajax({
        type: "GET",
        url:  urlink,
        dataType:"jsonp",
        async: false,
    });
}

function second(){
    var urlink = "https://192.168.150.3/api2?jsonpCallback=myCallback";
    $.ajax({
        type: "GET",
        url:  urlink,
        dataType:"jsonp",
        async: false,
    });
}

myCallback = function(data){
        /* if the caller is first then
        alert('first') & set value of var One; 
        else alert("second") & set value of var Two;
        How to do this?*/
        }

据我阅读herethere,没有解决方案,至少对我不起作用。任何建议/解决方法将不胜感激。 :)

【问题讨论】:

  • 对不起,为什么要复制一个函数?只需调用相同的函数,但传递一个额外的参数并使用这个额外的参数!
  • 避免使用async:false....stackoverflow.com/questions/6902174/…
  • MrPk 谢谢。这也是一个很好的解决方案。但是你能否确认这个问题没有其他解决方案。正如我在问题中提供的链接中所述。
  • @ρss 见帖子。谢谢

标签: jquery


【解决方案1】:

我已经更新了代码。看看这是否对您有帮助并告知。 fiddle

看看这对你有帮助吗。

var tryFun = function(obj) {
        var callerFunction =this.name;
        alert(obj +" calling function "+callerFunction);

    };

function first() {
    this.name="first";
        tryFun.call(this,"akash");
    }

function second() {
    this.name="second";
        tryFun.call(this,"akash");
    }

first();
second();

【讨论】:

    【解决方案2】:

    试试

    $(function () {
        var one = "",
            two = "",
            _name = "",
            _url =  urlink; // without `?jsonpCallback=callback"`
        callback = function (data) {        
                $("#result")
                .append("<br>" + _name + ":" + data.result);
                alert(_name)
        };
        var cb = function (name) {
            $.ajax({
                beforeSend: function (jqxhr, settings) {
                    _name = name
                    if (_name === "first") {
                        one = _name
                    } else {
                        two = _name
                    }
                },
                type: "GET",
                url: _url,
                dataType: "jsonp",
                jsonpCallback: "callback"
            })
        };
        // call as `cb("first")` , `cb("second")
        // allow 1s between calls
        $.when(cb("first"), 
               setTimeout(function() {
                   cb("second")
               },1000))
    });
    

    另见

    Pass additional parameter to a JSONP callback,

    Can I make a jQuery JSONP request without adding the '?callback=' parameter in URL?

    $(function () {
        var one = "",
            two = "",
            _name = "",
            _url =  "https://gist.githubusercontent.com/"
                    + "anonymous/9a6997f09de9b68c59b2/"
                    + "raw/f7d7b756005ad6d2b88cf0211f78a2990d7d2dc7/"
                    + "content.json";
        callback = function (data) {        
                $("#result")
                .append("<br>" + _name + ":" + data.result);
                alert(_name)
        };
        var cb = function (name) {
            $.ajax({
                beforeSend: function (jqxhr, settings) {
                    _name = name
                    if (_name === "first") {
                        one = _name
                    } else {
                        two = _name
                    }
                },
                type: "GET",
                url: _url,
                dataType: "jsonp",
                jsonpCallback: "callback"
            })
        };
        $.when(cb("first"), 
               setTimeout(function() {
                   cb("second")
               },1000))
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div id="result"></div>

    【讨论】:

    • 所以你也按照 MrPk 的建议去做,将额外的参数传递给回调方法以区分调用者方法。
    • @ρss 是的。也可以将 (fn) name 附加到 url 字符串以区分对 cb 的调用,然后将 url 字符串解析为 name
    猜你喜欢
    • 2014-05-21
    • 2021-04-11
    • 1970-01-01
    • 2011-01-10
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2012-04-06
    相关资源
    最近更新 更多