使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题。本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据。

在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback。

注意,JSONP是JSON格式的扩展。他要求一些服务器端的代码来检测并处理查询字符串参数。

HTML

在本例中,为了演示跨域提交数据,我们假设A网站域名为www.helloweba.com,B网站域名为demo.helloweba.com。我们在A网站创建一个简单的表单,用于提交用户信息。

<form id="myform" action="#" method="post">    <p><label>姓名:</label><input type="text" class="input" name="username" /></p>    <p><label>性别:</label><input type="radio" name="sex" value="1" checked="checked" /> 男生     <input type="radio" name="sex" value="2" /> 女生 </p>    <p><label>年龄:</label><input type="text" class="input" name="age" /></p>    <p><input type="submit" class="btn" value="提 交" /></p> </form>  

jQuery

当用户填写完毕表单并点击“提交”按钮时,使用jQuery获取表单信息,并通过getJSON提交给B网站,请看代码:

$(function(){     $("#myform").submit(function(){         var data = $(this).serialize(); //序列化表单数据         $.getJSON("http://demo.helloweba.com/jsonp.php?callback=?",data,function(json){             var msg = ‘‘;             if(json){                var  sex = json.sex==1? "男生":"女生";                msg = "<div id=‘result‘><strong>提交成功!</strong><br/>姓名:                "+json.username+"<br/>性别:"+sex+"<br/>年龄:"+json.age+"</div>"             }else{                msg = "服务器忙,请稍候再试!";             }             $("#myform").after(msg); //将返回信息插入页面对应的元素后         });         return false;     }); }); 

从代码中可以看出,首先将表单数据序列化,获得json格式的表单数据,然后通过getJSON将数据发送给B网站URL:http://demo.helloweba.com/jsonp.php?callback=?,注意URL后面有个callback=?,将请求转换为一个JSONP请求。然后根据B网站处理结果响应,并将响应结果动态显示在A网站的表单提交页面。

PHP

本例中,B网站的jsonp.php程序获取A网站提交过来的表单数据,并将数据进行必要的处理(如有需要,可将数据过滤并插入数据库中),然后返回JSON格式的数据给A网站的表单提交页面。

$result[‘username‘] = $_GET[‘username‘]; $result[‘sex‘] = $_GET[‘sex‘]; $result[‘age‘] = $_GET[‘age‘]; echo $_GET[‘callback‘].‘(‘.json_encode($result).‘)‘; 

如果处理成功,会返回这样一串字符串:jsonp1331385001001({"username":"\u5929\u70ed\u7279","sex":"1","age":"28"})。

在很多地方应用到跨域提交数据技术,那么跨域上传附件(如图片等),是不是也可以用getJSON来实现呢?

时间: 2024-10-24 20:25:02

使用jQuery实现跨域提交表单数据的相关文章

jquery Ajax 通过jsonp的方式跨域提交表单

Jquery Ajax可以通过jsonp的方式跨域提交表单,至于什么是跨域提交简单说就是你的客户端和服务端不在同一个域名下或端口号不同也可以叫做跨域. 前台代码: $.ajax({ type : 'get', async: false, url : '${pageContext.request.contextPath}/clue/uploadForm', dataType : 'jsonp', data: { mydata : JSON.stringify(obj,fm), formId : f

jQuery通过AJAX快速提交表单数据

当表单数据项很多时,手动获取表单项的值将变得效率低下,结合jQuery提供的函数serialize(),我们可以实现快速获取数据并提交表单数据. 请看下面的表单: <form id="fm"> <table> <tr> <td>姓名</td> <td> <input type="text" name="name" /> </td> </tr>

C#使用jsonp进行跨域提交表单

跨域提交留言,并返回是否成功! C#服务端: public void FeedBackPost(string name, string email, string tel, string website, string desc, string thisIp, string sourse, string callBack) { try { Response.ContentType = "application/x-javascript"; string str = callBack;

js XMLHttpRequest + FormData 跨域提交表单上传文件

funUploadFile : function(file){ var self = this; // 在each中this指向没个v 所以先将this保留 var formdata = new FormData(); formdata.append("index", file.index); formdata.append("fileList", file); var xhr = new XMLHttpRequest(); if ("withCreden

JSONP跨域提交表单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Untitled Page</ti

js跨域提交表单【详细教程,包解决】

下面是前台js代码部分 $.ajax({ url: "http://tttcuxiao.uz.taobao.com",<span style="white-space:pre"> </span>//这里是提交url例子链接 type: "get",<span style="white-space:pre"> </span>//jsonp必须是get方式,post不支持,注意 da

[jQuery]$.get跨域提交不发送原因

使用 $.ajax({ url: "http://pastebin.com/embed_js.php?i=sy9gt3FR", dataType: "jsonp", success: function (data) { // ... } }); [jQuery]$.get跨域提交不发送原因,布布扣,bubuko.com

一款基于jquery ui的动画提交表单

今天要给大家分享一款基于jquery ui的动画提交表单.这款提交表单的的效果是以动画的形式依次列表所需填写的信息.效果非常不错,效果图如下: 在线预览   源码下载 实现的代码. html代码: <div align="center"> <form id="myform"> <div id="bloc_recherche_couleur"> <div id="etape0_recherche&

Struct2提交表单数据到Acion

Struct2提交表单数据到Action,Action取表单的数据,传递变量.对象 HTML.jsp <form action="reg.do" method="post"> <input> LoginAction get post 1.action里通过属性获取get.set方法获取. 2.模型驱动 3.model对象 action中要有和表单域对应的属性名,并且要有相应的符合javabean规范的set和get方法 http://blog