【问题标题】:How to use HTML Form instead of AJAX如何使用 HTML 表单而不是 AJAX
【发布时间】:2016-04-11 14:44:24
【问题描述】:
  1. 由于 Same-Origin-Policy,我无法使用 AJAX (XMLHTTPRequest)。
  2. 我无法访问服务器内部,我也没有 服务器代码。
  3. 服务器只支持HTTPMethods:POST, OPTIONS
  4. 我不能使用第三个服务器(例如使用 curl)

我可以使用表单-Post

<form method="post" action="some-web-server.com/something.JSON">
  <input name="param" value="some JSON param" />
</form>

得到答案,但我被重定向到 JSON.page 以获得答案。 有没有可能在 JS 中得到响应?类似的东西:

<form target="javascript: someFunctionUsingTheResponse(this.submit())" method="post" action="someServer/st.JSON" >

在 HTML 头中

<script type="text/javascript">
  function someFunctionUsingTheResponse(text){
    alert(text);
  }
</script>

更新: 我已经尝试创建一个 &lt;iframe name="dummy"&gt; 并将表单的目标设置为这个虚拟 iframe &lt;form target="dummy"&gt; 效果很好(在 Chrome 中,在 IE 中不起作用),但我仍然无法使用 JS 访问 iFrame 的数据. (原产地政策)

【问题讨论】:

  • 您的代码有服务器端部分吗?您可以将 ajax 请求发送到您自己的服务器并从那里执行 curl 以从远程 JSON 获取答案,然后将该值返回到您的前端。
  • jsonp 是你所需要的
  • jsonp 很棒,但据我所知,远程服务器必须支持它,否则它将无法工作,即将所有内容包装在回调参数中,因此它可能不是 OP 的选项.
  • 不,如果您从服务器端执行curl,那么即使它是不同的域也没关系(只要您可以访问它并且它没有被外部阻止等)。 curl 的一个例子:stackoverflow.com/questions/3062324/what-is-curl-in-php
  • 您可以向自己的服务器发送请求,然后使用 curl 向另一台服务器发送请求。请求:浏览器->自己的服务器(ajax)->不同的服务器(curl)响应:浏览器

标签: javascript html json forms


【解决方案1】:

表单元素应该是这样的:

<form onsubmit="someFunctionUsingTheResponse()">

你可以使用它作为你的函数:

function someFunctionUsingTheResponse(){
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            alert(xmlhttp.responseText);
        }
    }
    xmlhttp.open("GET", "some-web-server.com/something.JSON", false );
    xmlhttp.send();
}

【讨论】:

  • 问题的第一行:不能使用 AJAX,因为同源策略
【解决方案2】:

有没有可能在 JS 中得到响应?

没有。常规的表单提交不会使数据对 JS 可用。

任何在 JS 中获取数据的方式都会受到同源策略的约束。

ways to circumvent the same origin policy 有多种形式,但向目标 URL 提交的常规表单不是其中之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2021-12-19
    • 2013-08-06
    相关资源
    最近更新 更多