NodeJS post API调用和用post方法提交表单有什么区别?

uyto3xhc  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(126)

我想调用payment gateway,payment gateway通过表单提交调用,方法为post。我可以从node js HTTP模块使用post API调用相同的网关吗?我很困惑,因为如果我使用post API调用gateway,它不会重定向到新页面,而form有methodaction可以通过post调用重定向到新页面。

5uzkadbs

5uzkadbs1#

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

  1. HTML表单,提交按钮,用户按下提交按钮,不涉及JavaScript。
  2. HTML表单,JavaScript获取表单的DOM元素并调用表单对象上的.submit()方法。
  3. AJAX 调用使用XMLHttpRequest接口和POST方法,并手动发送适当的表单数据。
    1.使用POST方法调用 AJAX Fetch并手动发送适当的表单数据。
    使用#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 --仅此而已。您的脚本必须处理该响应并决定下一步要做什么。
    我很困惑,我不能调用网关使用后API,因为它不会重定向到新页面
    你可以。你只需要编写自己的JavaScript来处理来自编程API调用的响应,如果是3xx重定向,那么将window.location设置为新的URL以指示浏览器加载新的重定向页面。
l5tcr1uw

l5tcr1uw2#

表单数据通常以如下方式发送

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

相关问题