【问题标题】:Send cross domain HTTP Post with HTML forms使用 HTML 表单发送跨域 HTTP Post
【发布时间】:2013-04-15 15:57:39
【问题描述】:

我有这个 HTML 表单,我需要在提交之前进行一些处理:

<form action="http://appid.appspot.com/api/foo" id="contact-form" method="post"
name="contact-form">
    <fieldset>
        <label><input name="email" onblur=
        "if(this.value=='') this.value='Email'" onfocus=
        "if(this.value =='Email' ) this.value=''" value="Email"></label>
        <label><input name="subject" onblur=
        "if(this.value=='') this.value='Subject'" onfocus=
        "if(this.value =='Subject' ) this.value=''" value="Subject"></label> 
        <textarea name="message" onblur=
        "if(this.value=='') this.value='Message'" onfocus=
        "if(this.value =='Message' ) this.value=''">
Message
</textarea>

        <div class="buttons">
            <a href="#" onclick=
            "document.getElementById('contact-form').reset()">Clear</a>
            <a href="#" onclick=
            "document.getElementById('contact-form').submit()">Send</a>
        </div>
    </fieldset>
</form>

基本上,我需要做的是:

  • 当点击提交按钮时,会出现一个弹窗提示消息已经提交(通过检查服务器响应),

  • 我需要复制特定表单输入的值,比如输入元素的值。然后将电子邮件附加到实际消息中,例如“消息”表单将是例如"Email: x@dot.com Message: Hello world"

更新:

我的问题是,如果这样会更好,我想将这个基于 HTML 表单的基本 POST 迁移到 Ajax 调用中,这样我就可以轻松实现上面概述的目标。

【问题讨论】:

  • 您究竟在哪里遇到跨域错误?
  • @AkshaySinghal 实际上没有跨域错误,这个表单实际上可以发送到不同的域。但是不确定这是否适用于所有浏览器。
  • 对不起,我不明白你的问题是什么。
  • @AkshaySinghal 我的意思是,我想将此代码迁移到 Ajax 代码中

标签: javascript jquery ajax http cross-domain


【解决方案1】:

您想使用表单的onsubmit

我稍微更改了您的 html(尤其是内联 javascript)(为了清楚起见):

<form action="http://appid.appspot.com/api/foo" id="contact-form" method="post"
name="contact-form" onsubmit="return doStuff() ? true:false;">
    <fieldset>
        <input name="email" value="Email"
             onblur="if(this.value===''){this.value=this.defaultValue}" 
            onfocus="if(this.value===this.defaultValue){this.value=''}" > <br>
        <input name="subject" value="Subject"
             onblur="if(this.value===''){this.value=this.defaultValue}" 
            onfocus="if(this.value===this.defaultValue){this.value=''}" > <br>
        <textarea name="message" 
                onblur="if(this.value===''){this.value=this.defaultValue}" 
               onfocus="if(this.value===this.defaultValue){this.value=''}"
                      >Message</textarea>
        <div class="buttons">
            <a href="#" onclick=
            "document.getElementById('contact-form').reset()">Clear</a>
            <a href="#" onclick=
            "if(doStuff()){document.getElementById('contact-form').submit();}">Send</a>
        </div>
    </fieldset>
</form>

您可以看到输入元素上的自动填充/自动清除现在有点重复,因此您可以将其分解为单独的通用函数。

这是在表单实际提交之前运行的 javascript 函数:

function doStuff(){
    var eml=document.getElementsByName('email')[0].value;
        msg=document.getElementsByName('message')[0];
    msg.value = 'Email: ' + eml + ' Message: ' + msg.value;
    alert ('message has been submitted');
    return true;
}

Working JSFiddle here

如果其他域使用 session-cookies 和/或检查文档引用者,则执行此跨域可能会变得棘手。

更新:我看到您更新了您的问题,现在想要检查并在您的消息中显示服务器响应?

【讨论】:

  • 当我尝试快速发送表单时,即使消息框也没有显示——当我尝试按钮提交时...
  • 什么意思?我为&lt;input type="submit" value="send"&gt;(而不是您当前的&lt;a href="#" ...&gt;)准备了表格,请参阅fiddle v2
  • 其实如果HTML表单上传更好,那么我最好从ajax,
  • 我很困,所以我无法理解我需要实现的目标...好在现在可以了,现在我可以睡觉了...
猜你喜欢
  • 2012-01-19
  • 2014-11-24
  • 2013-04-10
  • 2019-03-09
  • 2014-11-27
  • 2021-12-10
  • 2021-12-01
  • 2014-03-13
  • 2011-04-05
相关资源
最近更新 更多