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

Javascript 表单操作与AJAX请求-发送JSON,javascript,php,json,ajax,forms,Javascript,Php,Json,Ajax,Forms,在一个相当重要的PHP/Drupal网站上(这不是Drupal的问题),我们的任务是允许一个深度链接进入一个页面,其中调用站点必须提供大量数据 跨域不会成为问题,因为我们可以控制两端,并可以根据需要进行调整 因此,我们想要的是,在发起服务器[a]上单击表单提交将把POST数据发送到接收服务器[B]。这很简单 复杂性的产生是因为有大量的非用户数据也必须发送(不管为什么或从哪里发送)。因此,(i)有额外的数据要添加到POST有效负载中,(ii)原始服务器[A]是node.js,它们希望发送JSON编

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

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

因此,我们想要的是,在发起服务器[a]上单击表单提交将把POST数据发送到接收服务器[B]。这很简单

复杂性的产生是因为有大量的非用户数据也必须发送(不管为什么或从哪里发送)。因此,(i)有额外的数据要添加到POST有效负载中,(ii)原始服务器[A]是node.js,它们希望发送JSON编码的数据,而不是使用urlencoded格式

他们(JS的人)想一跳就完成。用户单击[A]上的表单,构建有效负载,发布到deeplink URL,浏览器显示[B]中的新页面

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

据我所知,表单操作URL是关键。它重定向浏览器,在URL或正文中发送表单URL编码的数据。(正如我们所知,它不能像JSON那样实现。)

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

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

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

不,它不是

最接近的方法是使用Ajax发出请求,并在响应中包含一个URL(带有标识您使用Ajax发出的请求的标记),您可以在XHR的
load
事件中将该URL分配给
location.href

不,不是


最接近的方法是使用Ajax发出请求,并在响应中包含一个URL(带有标识您使用Ajax发出的请求的标记),您可以在XHR的
加载
事件中将该URL分配给
location.href

让我了解您的问题:

在服务器A(nodejs)上有一个按钮,单击该按钮后,您希望将一些数据(加上大量其他数据)发送到第二个服务器B,该服务器B将显示完全不同的页面

您的(nodejs)人员希望直接从nodejs向您发送json编码的数据

我认为你有两个选择

第一,不太好:

nodejs在服务器A上显示表单,在指向服务器B(深度链接)的
标记
操作
属性中,将附加数据设置为隐藏输入字段(按照您的意愿进行编码),然后服务器B获取数据,解码并显示最终页面

优点: -简朴

缺点: -您向外部用户公开服务器B的所有数据和链接(数据通过浏览器发送到服务器B), -可能存在大量数据(以及长时间传输), -数据可能被(攻击者)操纵

第二种选择更好:

服务器A显示html
表单
,并从该表单接收数据,然后服务器A直接向服务器B发送数据,然后服务器A接收来自服务器B的响应,并作为对已发布表单的响应发送

优点: -安全(不公开其他数据,并且隐藏了深层url) -服务器A和B可以通过LAN而不是internet进行通信,因此速度要快得多 -您可以隐藏服务器B的存在

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

请让我了解您的问题:

在服务器A(nodejs)上有一个按钮,单击该按钮后,您希望将一些数据(加上大量其他数据)发送到第二个服务器B,该服务器B将显示完全不同的页面

您的(nodejs)人员希望直接从nodejs向您发送json编码的数据

我认为你有两个选择

第一,不太好:

nodejs在服务器A上显示表单,在指向服务器B(深度链接)的
标记
操作
属性中,将附加数据设置为隐藏输入字段(按照您的意愿进行编码),然后服务器B获取数据,解码并显示最终页面

优点: -简朴

缺点: -您向外部用户公开服务器B的所有数据和链接(数据通过浏览器发送到服务器B), -可能存在大量数据(以及长时间传输), -数据可能被(攻击者)操纵

第二种选择更好:

服务器A显示html
表单
,并从该表单接收数据,然后服务器A直接向服务器B发送数据,然后服务器A接收来自服务器B的响应,并作为对已发布表单的响应发送

优点: -安全(不公开其他数据,并且隐藏了深层url) -服务器A和B可以通过LAN而不是internet进行通信,因此速度要快得多 -您可以隐藏服务器B的存在

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

您可以将JSON数据以隐藏的形式输入吗?作为测试的一部分,我已经这样做了,效果很好,但这不是计划的数据契约的一部分。我想探索所有的选择,因为我甚至不知道是否可以做到。因此,最后才是真正的问题。我有其他的解决方案,但它可以按我们想要的方式完成吗?您认为您将从哪里修改有效负载?在我看来,你故意排除了简单的解决办法。我是