表单操作与AJAX请求 - 发送JSON

时间:2016-07-01 12:19:23

标签: javascript php json ajax forms

在一个相当主要的PHP / Drupal网站上(这不是Drupal问题)我们的任务是允许深度链接到一个页面,其中必须由调用站点提供大量数据。

跨域不会成为问题因为我们控制两端并且可以根据需要进行调整。

所以我们想要的是在原始服务器[A]上单击“提交表单”会将POST数据发送到接收服务器[B]。这很容易。

复杂性之所以出现,是因为必须发送大量非用户数据(无论何时何地来源都无关紧要)。所以(i)还有其他数据要添加到POST有效载荷中,以及(ii)原始服务器[A]是node.js,他们想要发送JSON编码数据而不使用form-urlencoded。

他们(JS家伙)想要一次跳跃。用户单击[A]上的表单,他们构建有效负载,POST到深层链接URL,浏览器显示[B]中的新页面。

我可以在PHP端处理它,但我无法在概念上理解它。我不认为这是可能的。

据我了解,表单操作URL是关键。这就是重定向浏览器,在URL或正文中发送form-urlencoded数据。 (不能像我们所知的那样做JSON。)

但在我看来,如果他们做任何事情来中断[A]上表单的处理,浏览器将不会被重定向到[B],它只会变成一个AJAX调用。

所以问题是:是否可以修改表单的有效负载并仍然获得相同的行为,将浏览器重定向到新页面?

(解决方案,如果这是不可能的,相对简单,AJAX调用设置一切,返回一个URL,将浏览器重定向到提供的URL。)

2 个答案:

答案 0 :(得分:1)

不,不是。

您最接近的可能是使用Ajax发出请求,并在响应中包含一个URL(带有一个标记,用于标识您使用Ajax创建的请求),您可以将其分配给{{1}在XHR的location.href事件中。

答案 1 :(得分:1)

让我了解您的问题:

在服务器A(nodejs)上有一个按钮,点击后你想要一些数据(加上很多其他数据)到B发送到第二个服务器B,这将显示完全不同的页面

你的(nodejs)家伙想要直接从nodejs发送数据,json编码

我认为你有两个选择

首先 - 不太好:

nodejs在服务器A上显示表单,其中附加数据设置为隐藏输入字段(按照您希望的编码方式),在<form>标记action属性中指向服务器B(深层链接),然后服务器B获取数据,解码并显示最终页面。

优点: - 简单

缺点: - 向外部用户公开所有数据并链接到服务器B(数据通过浏览器发送到服务器B), - 可能有很多数据(和长传输), - 数据可以被操纵(攻击者)

第二个选项,更好:

是服务器A显示html form,并从此表单接收数据,然后服务器A直接向服务器B发送数据,然后服务器A收到服务器B的响应并作为响应发送形式。

优点: - 安全(您不会公开其他数据并隐藏深层网址) - 更快,因为服务器A和B可以通过LAN而不是互联网进行通信 - 您可以隐藏服务器B的存在

缺点: - 如果要将用户切换到服务器B,处理的复杂性 - 在这种情况下,您需要返回(作为示例)URL到服务器B上的页面,因此服务器A将HTTP重定向作为响应发送到此URL。