【问题标题】:Passing a Javascript Function as Parameter - How Does This Logic Work?将 Javascript 函数作为参数传递 - 这个逻辑是如何工作的?
【发布时间】:2020-09-07 05:56:38
【问题描述】:

我不明白在提交付款表单后,下面的 responseHandler 函数如何接收来自 API 调用的响应。以下是代码的简要总结:

var PaymentThing = function(e) {
    this["clientCallback"] = e;

    return {
        createToken: function() {
            // HTTP GET URL is generated and then an HTML script element is appended to the page head
            var a = "https://example.com/securitytoken?creditcard=xxxx?callback=PaymentThing.callback";
            var f = document.createElement("script");
            f.src = a;
            document.getElementsByTagName("head")[0].appendChild(f)
        },
        callback: function(e) {
            this["clientCallback"](e.status, e.results)
        }
    }
}


var responseHandler = function(status, response) {
    // How does this even work?
    console.log(response, status);
}


// Form Submission
jQuery('#checkout_payment_form').submit(function() {
    PaymentThing.createToken(responseHandler);
}

所以我的问题是,responseHandler 函数如何接收来自 HTTP GET 调用的响应?在我看来,甚至没有进行 HTTP 调用。我只看到一个 URL 被添加到一个 HTML 脚本元素(使用 createToken 函数),该 URL 甚至从未被调用/执行(但不知何故它是?)。另外,当我没有看到它们被传递到 responseHandler 函数调用时,(状态、响应)参数是如何传递到 responseHandler 函数的?

我不明白这里的逻辑或操作顺序,谁能解释一下这是怎么回事?

编辑: 好的,我想我现在看到了 responseHandler 函数是如何接收状态和响应参数的。我编辑了上面的代码以显示生成的 HTTP url 中有一个回调函数。但是,该 URL 是如何被调用的?在我看来它仍然是惰性的,并且被卡在页面的 HTML 中并且没有激活。

【问题讨论】:

  • 您确定此代码有效 有效吗?这个 sn-p 有很多问题。
  • 我认为您可能在这里遗漏了一些代码。也许f.onload = arguments[0] 或类似的东西?
  • 这里缺少一些东西。 PaymentThing.createToken(...) 也会出错

标签: javascript function logic


【解决方案1】:

我认为如果您运行responseHandler 函数并将结果存储在一个变量中,该变量可以作为PaymentThing.createToken() 中的参数调用,它会考虑到它。

【讨论】:

    【解决方案2】:

    那里的代码都没有调用responseHandler。将它传递给 createToken 方法毫无意义,因为它完全忽略了所有参数。

    可能添加到页面的脚本尝试调用名为 responseHandler 的全局函数,但如果不检查脚本就无法判断。

    【讨论】:

    • 是的,添加的脚本确实尝试执行回调函数,该函数执行 responseHandler 函数。但是,当它刚刚添加到页面的 HTML 中时,为什么或如何实际执行该脚本?是否有一段代码我又丢失了,或者
    • @JohnWLIV — 是的。这就是脚本元素的全部意义:它加载并运行一个脚本。
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多