在一个相当主要的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。)
答案 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。