【发布时间】:2014-01-17 22:19:45
【问题描述】:
我需要模拟在外部站点上提交表单,我已经让它在其他站点上工作,但现在外部站点需要 json 格式的值作为参数,这很难实现。
在服务器需要 json 之前,我已经让它完美地处理了这个(注意 javascript 模拟提交表单,并且表单被编码为与外部站点相关):
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
function load()
{
window.document.login_form.submit();
return;
}
</script>
</head>
<body onload="load()">
<form name="login_form" method="post" action="http://external.webserver.com/web/session/authenticate">
<input type="hidden" name="name" value="andres" />
<input type="hidden" name="phone" value="593123123" />
</form>
在这里,我附上了一张图片,表明如果我将正文作为 json 数据发布,它将起作用。
作为解决方案,我尝试了其他想法,例如此处建议的 POST data in JSON format
function load()
{
var frm = $(document.login_form);
dat = JSON.stringify(frm.serializeArray());
alert("I am about to POST this:\n\n" + dat);
$.post(
frm.attr("action"),
dat,
function(data) {
alert("Response: " + data);
}
);
//window.document.login_form.submit();
return;
}
但是这种方法给我带来了一些与“访问控制允许来源”相关的其他问题,我不会解决这些问题,因为我不拥有我想要发布的服务器。
那么有人会提供一种更好的方法来将 json 帖子(或正文)发布到外部服务器吗?
【问题讨论】:
-
您确定服务器需要 JSON 表单数据吗?浏览器从不发送该格式的表单输入。浏览器通常支持的唯一格式是
x-www-form-urlencoded(与 URL 查询字符串相同的格式)或multipart/form-data(类似于多部分电子邮件正文)。
标签: javascript json forms