【问题标题】:What is the difference between post api call and form submission with post method?post api 调用和使用 post 方法提交表单有什么区别?
【发布时间】:2023-01-24 14:09:44
【问题描述】:

我想调用支付网关,因为使用表单提交调用支付网关的方法为post,我可以使用来自节点 js HTTP 模块的 post API 调用来调用同一个网关吗,我很困惑,我不能调用网关使用post API 导致它不会重定向到新页面,并且表单有 methodaction 可以通过 post 调用重定向到新页面?

【问题讨论】:

    标签: javascript node.js api post payment


    【解决方案1】:

    从浏览器提交表单有多种方式:

    1. HTML 表单、提交按钮、用户按下提交按钮,不涉及 Javascript。
    2. 页面中的 HTML 表单,Javascript 获取表单的 DOM 元素并调用表单对象上的 .submit() 方法。
    3. Ajax 调用使用带有 POST 方法的 XMLHttpRequest 接口并手动发送适当的表单数据。
    4. Ajax Fetch 使用 POST 方法调用并手动发送适当的表单数据。

      使用#1 或#2,浏览器发送表单,浏览器将注意重定向,并将在浏览器中显示表单响应(无论是否重定向)。

      对于#3 和#4,表单通过 Javascript 发送,响应返回到您的 Javascript。 #3 不处理重定向。 #4 有一个选项来处理重定向。以下是有关上述每个选项的更多信息。 #3 和#4 不影响浏览器显示完全不受影响,除非您编写自己的 Javascript 来处理请求并影响浏览器显示(通过插入内容或将 window.location 设置为新 URL。


      以下是有关上述方案的更多信息:

      使用 XMLHttpRequest 的编程 Ajax 调用不会以任何方式处理重定向或来自 Ajax 调用的响应。他们只是将该响应返回给您的 Javascript。请记住,重定向只是您可以从 Ajax 调用返回的一种特定类型的响应。这不同于浏览器提交的表单 POST。

      使用 fetch() 接口的编程 Ajax 调用提供了一个选项来自动跟随重定向。请参阅redirect选项here。但是,即使在这种情况下,fetch() 接口所做的只是获取重定向 URL 的内容。它不会导致浏览器页面发生变化。为此,您必须编写自己的 Javascript 代码来查看 3xx 重定向响应,然后将 window.location 设置为新的重定向 URL。或者,您必须让界面自动跟随重定向,然后对新的重定向内容执行某些操作,它将返回到您的 Javascript。

      这些编程请求不同于让浏览器为您提交表单。在浏览器提交的情况下(不使用 Javascript 提交表单),浏览器遵循重定向并根据从表单响应返回的任何内容更新浏览器中的显示。

      当您通过 Ajax 提交表单时,浏览器不会自动对服务器响应执行任何操作。该响应返回到您的 Javascript,您的脚本决定如何处理它。如果您希望您的脚本遵循重定向,那么您必须检查响应,查看它是否为 3xx 状态,从适当的标头获取新 URL 并将 window.location 设置为该新 URL。这将导致浏览器显示重定向页面。但是,您必须自己编写程序或找到一个提供功能的 Ajax 库来完成它。一个标准的 Ajax 调用只是将表单 POST 响应返回给您的 Javascript - 仅此而已。您的脚本必须处理该响应并决定下一步做什么。

      我很困惑,我无法使用 post API 调用网关,因为它不会重定向到新页面

      你可以。您只需要编写自己的 Javascript 来处理来自编程 API 调用的响应,如果它是 3xx 重定向,则将 window.location 设置为新 URL 以指示浏览器加载新的重定向页面。

    【讨论】:

    • 感谢您的许可,window.location 到新页面会将我重定向到新页面,但它不会像支付网关页面那样像我想要的那样是对该页面的发布请求。我想我必须使用带有操作的表单发布方法来将发布请求发送到网关页面。
    • 某些网址不允许获取请求。
    • https://stackoverflow.com/a/133997/6790744 我可以动态创建表单元素并在 javascript 中点击请求。
    • @AkshayBande - 我不明白你现在问的是什么问题。也许您需要创建一个新问题。您可以使用 Javascript 或 HTML 表单进行 POST。只有使用 HTML 表单(而不是通过 Javascript)自动发布才会自动更新浏览器的显示。是的,您可以使用 Javascript 在当前页面中创建表单。
    • @AkshayBande - 是的,您可以动态创建一个表单并使用 Javascript 调用其 .submit() 方法。这通常会像完全 HTML 提交一样工作。除了遵循重定向之外,我仍然不明白您试图通过表单响应解决什么实际问题。由于您从未描述过问题的那一部分,所以我不知道如何帮助您。
    【解决方案2】:

    表单数据通常像这样发送

    address=Stackoverflow&poster=Ashkay
    

    而 JSON 格式的普通帖子就像

    {
       "address": "stackoverflow",
       "poster": "Ashkay"
    }
    

    您可以在 NodeJS 中模拟表单 POST 请求,例如:

    const request = require("request");
    
    request({
      uri: "http://www.test.com/payment/gateway.php",
      method: "POST",
      form: {
        address: "Stackoverflow",
        name: "Ashkay"
      }
    }, function(error, response, body) {
      console.log(body);
    });
    
    

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 2011-10-11
      • 2019-05-31
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多