当前位置:首页 » 安卓系统 » androidform提交

androidform提交

发布时间: 2022-07-13 01:31:56

① android如何向网页提交表单数据

在后台写提交方法,然后通过js和后台交互的方法。网上很多介绍的

② 小白想请问form表单提交数据到钉钉,这个接口该怎么写 求详细

一、免登问题
1.如何在App及后台获取企业及用户相关信息
(1)微应用主页支持使用$CORPID$模板参数表示corpid,用户访问微应用的时候钉钉将把$CORPID$替换成用户所属企业的corpid,例如http://www.dingtalk.com/index?corpid=$CORPID$
(2)获取用户信息需要通过免登服务,详情http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.Bz74m4#免登服务

2.钉钉微应用OAuth2授权打开一个应用时提示对不起您无权限查看该页面
可能的原因:
(1)如果其他应用正常,或者企业其他人打开应用没问题,可能是缓存问题引起,请清除下缓存
(2)参数redirect_uri的值没有做url编码
(3)redirect_uri的域名和微应用的域名不一致

3.免登Code的时效性
免登授权码是一次性的,团队(未认证的企业)失效时间五分钟

二、JSAPI问题
1.jsapi权限校验失败,错误码080003是什么原因
请先按照文档,先检查参数agentid传值是否正确,agentId查看方式:
(1)如果是isv应用,需要通过http://open.dingtalk.com/doc/#10-获取企业的应用信息
(2)企业自建应用,通过oa后台查看http://open.dingtalk.com/doc/#开发环境准备

2.jsapi权限校验时返回{message:"权限校验失败",errorcode:3}
(1)首先检查用来生成签名(signature)的jsapi_ticket是否过期(jsapi_ticket有效期为7200秒,而且当你请求了新的ticket之后,旧的ticket就失效了)
(2)其次检查生成签名的Url参数,与调用dd.config 所在的url是否一致
生成签名用的url需要去除hash部分,e.g. 如果当前页面url是http://abc.def/ghi/jkl?m=123&n=456#opq,则用于生成签名的url是http://abc.def/ghi/jkl?m=123&n=456,可以使用调试工具来生成jsapi_ticket和signature,并和你实际使用的进行对比
(3)提示权限校验失败,errorcode:3,错误码52019,请检查corpid是否正确

3.使用JSAPI返回签名或者Ticket获取失败
JSAPI返回失败主要有两种错误
(1)[错误码:52011] [jsapi ticket 读取失败]
a.确认agentId参数正确传入
b.确认以传入agentId对应的企业身份获取过jsapi_ticket,也就是调用过get_jsapi_ticket方法
c.确认agentId对应的企业身份获取的jsapi_ticket没有过期.即在两个小时的有效期之内
(2)[错误码:52013][签名校验失败]
a.确认agentId参数正确传入
b.oa后台设置uri和权限校验uri不一致(去掉hash部分)
c.确认获得的jsapi_ticket为最新的,没有其他服务同时调用get_jsapi_ticket方法,导致生成签名的jsapi_ticket过期
d.确认生成jsapi签名正确,可以使用debug工具进行调试https://debug.dingtalk.com/

4.ios 单页面应用更改url#后面的参数(如:localhost:8100/#/test1 变成 localhost:8100/#/test2),调用jsapi无效
ios单页面应用更改url参数,导致调用jsapi无效问题,将在2.7版本随新版本发布;
若是老版本(2.7以前版本),需要打开页面时重新授权,调用jspai即可正常

5.jspai 调用返回errCode7 错误原因
(1)请查看在dd.config的jsApiList中,是否已配置要使用的jsapi,未配置的话会报错
(2)ios 单页面应用提示 errCode7 Jsapi Should NOT CallselectorString
同问题5,单页面应用更改url参数,导致调用jsapi无效,老版本(2.7以前版本)需要重新授权,调用jsapi正常
(3)requestJsApis() not invoked,errorCode:7
dd.ready一定要在dd.config之后执行

6.如何获取JSAPI权限(需再详细些)
可以参照http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.XpRuM1#客户端开发文档,要使用的jsapi必须进行权限验证配置,在dd.config中进行配置,可参照http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.XpRuM1#权限验证配置-beta

7.工具栏颜色如何设置
在页面需要引入js文件的前提下,通过url参数设置导航栏颜色,参数名为dd_nav_bgcolor
比如微应用当前页面链接为:https://abc.xyz/,要设置的颜色为FF112233(前两位默认FF,后面6位112233是对应的色值),可设置页面url为:https://abc.xyz/?dd_nav_bgcolor=FF112233

8.device.geolocation.get 提示unauthorized errcode 4
用户设备禁用了手机的定位功能

9. 钉钉发送会话消息,cid如何获取
使用场景示例:用户在微应用中拉起本地聊天窗口列表(通过调用jsapi-获取会话信息),选择某一个聊天窗口,微应用将收到钉钉返回的cid,通过这个cid会送会话消息。
a.前提条件:jsapi可使用,即已经配置到dd.config,且通过jsapi的权限校验
b.通过jsapi获取会话cid,详见http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.FDtb0f#获取会话信息

10.errorMessage:”err msg redirect_uri domain is not secure domain”,”errorCode”:”3”
在oa后台设置微应用首页地址(域名设置为可信域名,即可安全访问授权)

11.读取nfc芯片接口无法使用
[font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]目前nfc芯片接口只支持android(文档中已注明,请查看文档)

三、服务端API
1.调用管理通讯录接口返回43004,无效的HTTP HEADER Content-Type如何解决
管理通讯录的部分接口采用了POST请求,请求体使用JSON格式,请在HTTP请求头中设置Content-Type:application/json

2.上传文件不成功
使用multipart/form-data请求上传文件,需要附加文件标示信息,参数名为media;java示例代码为
HttpEntity requestEntity =MultipartEntityBuilder.create().addPart("media", new FileBody(file, ContentType.APPLICATION_OCTET_STREAM, file.getName())).build();

3.新建部门和员工信息为中文时,创建不成功
请检查编码格式,确认是utf-8编码

4.注册事件回调接口,每个corpid只能注册一个回调url吗
一个企业的一个套件,只能注册一个回调url

5.返回系统繁忙错误
(1)调试调用接口过程中出现,请先确保是否是JSON格式错误,比如POST时有的JSON里缺少了这种括号[ ]
(2)请检查url是否正确,如免登接口,通过code换取用户信息,/getuserinfo,实际应为/user/getuserinfo
(3)调用其他接口也返回系统繁忙,请您立刻在答疑群或论坛等反馈给钉钉人员

四、ISV接入问题
1.开发者平台创建套件校验url有效性问题
如果返回字符串不匹配,提示错误代码71009,可以通过以下常见问题确认具体原因:
a.可以通过将加密数据在本地解密下,看解密后的数据是否正确
b.查看是否是各字段名字错误,如timeStamp,却写成了timestamp

2.ISV接入回调接口没有suiteticket推送
注册套件之后,钉钉服务器会向填写的回调接口推送suite_ticket;接收到推送之后需要返回加密后的字符串“success”,如果不返回或返回错误,钉钉服务器将连续推送,直到推送次数超过100次,就不再推送;
此时需要进入开发者后台,进入套件管理页面,点击‘重新推送’按钮,即可重新推送

3.回调地址接收钉钉服务器推送下来的数据,遇到计算解密文字错误
请查看加解密库和demo下载第二个步骤,见http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.FDtb0f#加解密库和demo下载

4.模拟测试企业发起授权所有套件,收不到临时授权码,而是change_auth
在开发者平台,目前授权行为只能发起一次,如已经收到临时授权码,模拟测试企业发起授权行为,收到change_auth事件;
测试企业解授权功能近期会上线,请关注文档及论坛更新

5.不存在的临时授权码
临时授权码只能使用一次,使用后再次使用会提示“不存在的临时授权码”

6. isv开发中,如果permanentCode没有存下来,如何获取到
目前没有办法获取,可以通过解除授权再次授权重新获取,解除授权功能暂时未开放,请在文档及论坛关注开放时间

7. 微应用性能测试提供的测试号码加不进去
微应用性能测试提供的3个测试号码,使用钉钉开放平台通讯录接口添加的话,有最多加入5个非认证企业限制;建议通过钉钉管理后台(https://oa.dingtalk.com/#/login)的通讯录进行添加

8.微应用性能测试报告中的图像中,显示无权查看该页面可能原因
请将在测试的h5地址直接在钉钉会话中打开,如找一个聊天会话,把要测试的h5地址直接贴在会话中,并点击打开
a.如果打开提示无权查看该页面,则是h5地址问题;
b.如果打开正常,请联系钉钉值班同学反馈;

10.IP白名单问题,返回errcode":60020",访问ip不在白名单之中
调用钉钉API的机器需要配置在开发者平台中配置白名单

11.如何解除开发者平台的钉钉账号绑定
暂未提供开发者平台、云市场与钉钉账号解绑功能,请关注官方文档及论坛,若提供会同步更新

12.第三方ISV的套件开发完,如何与钉钉接入合作,让其他企业授权使用套件
ISV开发完成套件后,需要对微应用进行性能评测等(http://open.dingtalk.com/doc/index.html?spm=a3140.7785475.0.0.rscFVO#微应用性能评测),以及在钉钉应用市场进行上架后,才可被其他企业用户搜索到,并进行购买授权等操作;
可关注文档对应用市场内容的更新,可发送邮件至邮件组[email protected]进行咨询

13.isv如何获取企业中用的mobile和email
如果在开发者后台勾选了邮箱字段,则可以获取用户的email;mobile暂不提供

14.isv demo中返回创建套件时返回解密文字或corpid或者suiteKey不匹配
(1)在 ENV文件中
[font='Helvetica Neue', Helvetica, Arial, sans-serif]public static final String CREATE_SUITE_KEY = "suite4xxxxxxxxxxxxxxx";//首次创建套件校验url时使用;
public static final String SUITE_KEY = "";//已有套件时使用
(2)IsvReceiveServlet中
dingTalkEncryptor = new DingTalkEncryptor(Env.TOKEN, Env.ENCODING_AES_KEY, Env.SUITE_KEY);
第三个参数使用,如果首次创建校验url使用 Env.CREATE_SUITE_KEY,即
dingTalkEncryptor = new DingTalkEncryptor(Env.TOKEN, Env.ENCODING_AES_KEY, Env. CREATE_SUITE_KEY);
如果已有套件,使用Env.SUITE_KEY,且在ENV文件中将public static final String SUITE_KEY = "xxxx";赋值,即
dingTalkEncryptor = new DingTalkEncryptor(Env.TOKEN, Env.ENCODING_AES_KEY, Env.SUITE_KEY);

五、通用问题
1.isv接入demo
最近收到isv接入demo存在加解密失败问题,这部分demo正在更新,近期会更新(http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.ai7Y3e#加解密库和demo下载)
2.钉钉https下使用oss Js SDK请求ERRSSLPROTOCOLERROR
https://bbs.aliyun.com/read/275103.html?spm=0.0.0.0.L7U6vv

六、常见需求及建议回复
1.发Ding的接口是否支持
钉钉不对外提供提供服务端ding接口

2.钉钉是否开放公告接口
钉钉暂不开放公告接口

3.钉钉是否提供审批、签到等微应用接口,便于第三方系统数据对接
目前只提供了管理日历接口接入,详见http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.ai7Y3e#管理日历接入指南;
其他暂未提供

4.钉钉产品如何与企业内部的ERP系统实现对接
(1)可以基于钉钉开放平台开发一个报表的微应用,钉钉提供免登机制获取用户信息,报表权限由你开发的微应用进行控制
(2)微应用是基于H5开发的,因此可以基于H5开发图标展示
(3)企业内部的文件可以通过钉盘进行存储,也可以存放在自己的服务器,在微应用内进行下载
以上实现均需开发微应用

③ android客户端如何提交表单数据给web服务器

1.服务器端的准备
为了完成该实例,我们需要在服务器端做以下准备工作:
(1)我们需要在MyEclipse中创建一个Web工程,用来模拟服务器端的Web服务,这里,我将该工程命名为了“myhttp”。
(2)修改该工程的“index.jsp”文件,添加两个输入框和一个提交按钮,作为该Web工程的显示页面。运行Tomcat,在浏览器中访问该Web工程,可以看到如图1所示的界面。

Web工程的显示页面
(3)在该Web工程中,创建一个继承自HttpServlet的LoginAction类,并实现其中的doPost()方法,用来响应图1所示页面的用户操作。具体实现如下:

由上述代码可以看出,当我们在图1所示的页面输入用户名“admin”,密码“123”时,点击提交按钮,会得到“Login succeeded!”的提示信息,如图2所示。若用户名、密码错误,则会得到“Login failed!”的提示信息。
2.客户端实现
在Android客户端,我们需要完成的工作是:以POST方式发送用户名密码到上述服务器,并获得服务器的验证信息。
我们分以下几个步骤来完成。
2.1 UI界面
在Android工程中,我们需要完成一个简单的UI界面,用来完成用户名密码的输入、发送POST请求、显示服务器的验证结果,完成后的界面如图3所示。
在MainActivity中,我们需要获取两个EditText控件的输入,“提交”按键的监听,以及服务器验证结果的TextView内容显示。具体实现代码如下:

2.2发送POST请求到服务器
可以看到上述代码中,我们调用了HttpUtils类的静态方法submitPostData()完成了发送POST请求到服务器,并将该方法的返回值(服务器的响应结果)显示在了TextView控件中。

通过以上的代码可以看出,在该方法中,其实完成了3件事:
(1)将用户名密码封装成请求体,这是通过调用getRequestData()方法来实现的(后面会讲到这个方法的具体实现)。
(2)设置HttpURLConnection对象的各种参数(其实是设置HTTP协议请求体的各项参数),然后通过httpURLConnection.getOutputStream()方法获得服务器输出流outputStream,再使用outputStream.write()方法将请求体内容发送给服务器。
(3)判断服务器的响应码,通过httpURLConnection.getInputStream()方法获得服务器的响应输入流,然后再调用dealResponseResult()方法处理服务器的响应结果。
2.3封装请求体
使用POST请求时,POST的参数不是放在URL字符串里,而是放在HTTP请求数据中,所以我们需要对POST的参数进行封装。
针对该实例而言,我们发送的URL请求是:http://192.168.1.101:8080/myhttp/servlet/LoginAction,但是我们需要将POST的参数(也就是username和password)封装到该请求中,形成如下的形式:
2.4处理响应结果
最后,我们再来看一看对服务器返回结果的处理是怎样的。因为在本实例中,服务器的返回结果是字符串“Login succeeded!”或“Login failed!”,所以这里我们需要做的就是将服务器的返回结果输入流转化成字符串。当然了,如果服务器返回的是图片,那么,我们就需要就得到的输入流转化成Bitmap图片了。如下代码是上面代码中用到的dealResponseResult()方法的具体实现。
2.5运行效果

④ 安卓界面的按钮怎么提交事件,例如我要提交到一个Java文件,实现注册的功能,跟HTML里的表单提交类似

首先你这个是布局文件,按钮你写了onclick事件,这个时候你应该在Activity应用这个布局文件,再在那个Activity获取你要的参数,然后直接调用你写的验证的java方法就OK了

⑤ android httpclient 怎么提交订单和订单明细参数

package cn.itcast.net;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import cn.itcast.utils.StreamTool;

public class HttpRequest {

public static boolean sendXML(String path, String xml)throws Exception{
byte[] data = xml.getBytes();
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5 * 1000);
conn.setDoOutput(true);//如果通过post提交数据,必须设置允许对外输出数据
conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
OutputStream outStream = conn.getOutputStream();
outStream.write(data);
outStream.flush();
outStream.close();
if(conn.getResponseCode()==200){
return true;
}
return false;
}

public static boolean sendGetRequest(String path, Map<String, String> params, String enc) throws Exception{
StringBuilder sb = new StringBuilder(path);
sb.append('?');
// ?method=save&title=435435435&timelength=89&
for(Map.Entry<String, String> entry : params.entrySet()){
sb.append(entry.getKey()).append('=')
.append(URLEncoder.encode(entry.getValue(), enc)).append('&');
}
sb.deleteCharAt(sb.length()-1);

URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
if(conn.getResponseCode()==200){
return true;
}
return false;
}

public static boolean sendPostRequest(String path, Map<String, String> params, String enc) throws Exception{
// title=dsfdsf&timelength=23&method=save
StringBuilder sb = new StringBuilder();
if(params!=null && !params.isEmpty()){
for(Map.Entry<String, String> entry : params.entrySet()){
sb.append(entry.getKey()).append('=')
.append(URLEncoder.encode(entry.getValue(), enc)).append('&');
}
sb.deleteCharAt(sb.length()-1);
}
byte[] entitydata = sb.toString().getBytes();//得到实体的二进制数据
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5 * 1000);
conn.setDoOutput(true);//如果通过post提交数据,必须设置允许对外输出数据
//Content-Type: application/x-www-form-urlencoded
//Content-Length: 38
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));
OutputStream outStream = conn.getOutputStream();
outStream.write(entitydata);
outStream.flush();
outStream.close();
if(conn.getResponseCode()==200){
return true;
}
return false;
}

//SSL HTTPS Cookie
public static boolean sendRequestFromHttpClient(String path, Map<String, String> params, String enc) throws Exception{
List<NameValuePair> paramPairs = new ArrayList<NameValuePair>();
if(params!=null && !params.isEmpty()){
for(Map.Entry<String, String> entry : params.entrySet()){
paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc);//得到经过编码过后的实体数据
HttpPost post = new HttpPost(path); //form
post.setEntity(entitydata);
DefaultHttpClient client = new DefaultHttpClient(); //浏览器
HttpResponse response = client.execute(post);//执行请求
if(response.getStatusLine().getStatusCode()==200){
return true;
}
return false;
}
}

package cn.itcast.uploaddata;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import cn.itcast.net.HttpRequest;
import android.test.AndroidTestCase;
import android.util.Log;

public class HttpRequestTest extends AndroidTestCase {
private static final String TAG = "HttpRequestTest";

public void testSendXMLRequest() throws Throwable{
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><persons><person id=\"23\"><name>liming</name><age>30</age></person></persons>";
HttpRequest.sendXML("http://192.168.1.100:8080/videoweb/video/manage.do?method=getXML", xml);
}

public void testSendGetRequest() throws Throwable{
//?method=save&title=xxxx&timelength=90
Map<String, String> params = new HashMap<String, String>();
params.put("method", "save");
params.put("title", "liming");
params.put("timelength", "80");

HttpRequest.sendGetRequest("http://192.168.1.100:8080/videoweb/video/manage.do", params, "UTF-8");
}

public void testSendPostRequest() throws Throwable{
Map<String, String> params = new HashMap<String, String>();
params.put("method", "save");
params.put("title", "中国");
params.put("timelength", "80");

HttpRequest.sendPostRequest("http://192.168.1.100:8080/videoweb/video/manage.do", params, "UTF-8");
}

public void testSendRequestFromHttpClient() throws Throwable{
Map<String, String> params = new HashMap<String, String>();
params.put("method", "save");
params.put("title", "传智播客");
params.put("timelength", "80");

boolean result = HttpRequest.sendRequestFromHttpClient("http://192.168.1.100:8080/videoweb/video/manage.do", params, "UTF-8");
Log.i("HttRequestTest", ""+ result);
}
}
服务器端代码:

package cn.itcast.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import cn.itcast.formbean.VideoForm;
import cn.itcast.utils.StreamTool;

public class VideoManageAction extends DispatchAction {

public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
VideoForm formbean = (VideoForm)form;
if("GET".equals(request.getMethod())){
byte[] data = request.getParameter("title").getBytes("ISO-8859-1");
String title = new String(data, "UTF-8");
System.out.println("title:"+ title);
System.out.println("timelength:"+ formbean.getTimelength());
}else{
System.out.println("title:"+ formbean.getTitle());
System.out.println("timelength:"+ formbean.getTimelength());
}
//下面完成视频文件的保存
if(formbean.getVideo()!=null && formbean.getVideo().getFileSize()>0){
String realpath = request.getSession().getServletContext().getRealPath("/video");
System.out.println(realpath);
File dir = new File(realpath);
if(!dir.exists()) dir.mkdirs();
File videoFile = new File(dir, formbean.getVideo().getFileName());
FileOutputStream outStream = new FileOutputStream(videoFile);
outStream.write(formbean.getVideo().getFileData());
outStream.close();
}
return mapping.findForward("result");
}

public ActionForward getXML(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
InputStream inStream = request.getInputStream();
byte[] data = StreamTool.readInputStream(inStream);
String xml = new String(data, "UTF-8");
System.out.println(xml);
return mapping.findForward("result");
}
}

⑥ 安卓开发 怎么避免重复提交请求

web前端数据请求或者表单提交往往通过对dom的点击事件来操作,但是往往因为认为点击过快(少年手速挺快的嘛),或者因为响应等待使得用户误人为没操作而重复很多次点击,造成表单数据的连续重复提交,造成用户体检的不好,甚至影响到整个系统的安全性。而前端的防治重复提交至少很有效的防治了人为正常操作下的很多不必要麻烦。下面就来讲讲如何有效避免前端的表单重复提交 表单提交有以下几种方式: <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> 另外,还有一种常用的方法是使用图片: 代码如下: <form name=”form” method=”post” action=”# "> <input type=”image” name=”submit” src=”btnSubmit.jpg”> </form> 第三种是使用链接来提交表单,用到了javascript的DOM模型: 代码如下: <form name=”form” method=”post” action=”#”> <a href=”javascript:form.submit();”>提交</a> </form> 实际上这一种是通过js 进行提交。可以理解成 $("form").find("a").click(function(){ $("form").submit(); }); 第一种和第二种可以用js来: $("input[type='submit']").click(function(){ $("form").submit(); }); $("input[name='submit']").click(function(){ $("form").submit(); }); 总之,都是对form进行提交,当然还有出了表单提交还有些请求也要防治重复,比如响应某个事件的ajax请求(提交数据) $.ajax({ url: url, type: "post", data: data, success: function (data) { callback; } }); 那么前面这些提交和请求在网络和性能因素上导致不能及时网络响应并且在事件多次响应时造成的重复,除非在提交响应完成前的点击(触发事件)视为无效,等当前响应完了再去响应下一个请求 如果是表单按钮我们可以这样在点击后将按钮disabled掉 $("input[type='submit']").click(function(){ $(this).attr("disabled",true); $("form").submit(); }); 按道理来说,将点击后将按钮disabled设为true时按钮就不能点击了那么第二次以后点击就无效了,但这样做你会发现同时第一次点击的表单也无法正常提交了(好像是h5的标准后才不行的,无论怎样h5标准的浏览器我试了试都不行),看来是disabled影响了表单的提交,那么先提交后disabled看行不行 $("input[type='submit']").click(function(){ $("form").submit(); $(this).attr("disabled",true); }); 实验结果 ,这样也不行,我们不能猜想submit()回调在click函数最后执行并且.submit()函数内部应该对disabel做了判断(假设这是浏览器内部机制原理),反正在当前这个交互周期里disabled了就不能submit 那么我们可以抛开disabled用代码逻辑来防治重复 $("input[type='submit']").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $("form").submit(); } }); 在当前点击的按钮如果没有repeat的话就进入提交并且设置个值为true的repeat属性,当第二次进来的时候发现有这个属性就不提交,看似这样的逻辑会防治重复提交了,但是事实永远都是残酷的! 是的,当点击过快的时候还是会重复提交,这是因为,如果click里没执行submit的时候html默认的type=submit 的input点击操作会提交表单,举个完整的例子 <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> $("input[type='submit']").click(function(){ console.log("here is click too!"); }); <form name=”form” method=”post” action=”#"> <div>提交</div> </form> $("form").find("div").click(function(){ $("form").submit(); }); 这三个代码都是一个效果提交表单,但是!!!!!!!!!!我们发现阻止表单提交的不就是在当前交互周期(一次点击-》响应-》回调)里,将submit按钮disabled掉吗,好的,少年上代码 $("form").find("div").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $(this).closest("form").submit(); }else{ $(this).attr("disabled",true); } }); 看到没有,第二次点击的时候就disabeld掉了,所以只有第一次成功,第二次的就不会提交了! 当然,如果是其他dom元素防治重复点击那就更简单了 $("div").click(function(){ if(!!$(this)[0].isRepeat){ return; } $(this)[0].isRepeat=1; $.ajax({ url: url, type: "post", data: data, success: function (data) { $(this)[0].isRepeat=0; callback; } }); }); 因为submit()会刷新试图,而ajax不会,所以在回调后需要把判断重复的那个属性赋值为false 这是不是就更简单?我想你会这样认为的! 以上所述是小编给大家介绍的JS WEB 前端开发中防治重复提交的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

⑦ android webview 有获取到表单提交数据吗

是可以获取到的,可以通过java的对象,将数据传递到java里面,回调取得值。

⑧ Android POST提交

一、需要用到的场景

在jQuery中使用$.post()就可以方便的发起一个post请求,在android程序中有时也要从服务器获取一些数据,就也必须得使用post请求了。

二、需要用到的主要类

在android中使用post请求主要要用到的类是HttpPost、HttpResponse、EntityUtils

三、主要思路

1、创建HttpPost实例,设置需要请求服务器的url。

2、为创建的HttpPost实例设置参数,参数设置时使用键值对的方式用到NameValuePair类。

3、发起post请求获取返回实例HttpResponse

4、使用EntityUtils对返回值的实体进行处理(可以取得返回的字符串,也可以取得返回的byte数组)

代码也比较简单,注释也加上了,就直接贴出来了

[java]
package com.justsy.url;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.os.Bundle;

public class HttpURLActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("start url...");
String url = "http://192.168.2.112:8080/JustsyApp/Applet";
// 第一步,创建HttpPost对象
HttpPost httpPost = new HttpPost(url);

// 设置HTTP POST请求参数必须用NameValuePair对象
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "downloadAndroidApp"));
params.add(new BasicNameValuePair("packageId", "89dcb664-50a7-4bf2-aeed-49c08af6a58a"));
params.add(new BasicNameValuePair("uuid", "test_ok1"));

HttpResponse httpResponse = null;
try {
// 设置httpPost请求参数
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
httpResponse = new DefaultHttpClient().execute(httpPost);
//System.out.println(httpResponse.getStatusLine().getStatusCode());
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 第三步,使用getEntity方法活得返回结果
String result = EntityUtils.toString(httpResponse.getEntity());
System.out.println("result:" + result);
T.displayToast(HttpURLActivity.this, "result:" + result);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end url...");
setContentView(R.layout.main);
}
}

ADD:使用HttpURLConnection 进行post请求

[java]
String path = "http://192.168.2.115:8080/android-web-server/httpConnectServlet.do?PackageID=89dcb664-50a7-4bf2-aeed-49c08af6a58a";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
System.out.println(conn.getResponseCode());

============================================================================================================================

通过get和post方式向服务器发送请求

首先说一下get和post的区别

get请求方式是将提交的参数拼接在url地址后面,例如http://www..com/index.jsp?num=23&jjj=888;
但是这种形式对于那种比较隐私的参数是不适合的,而且参数的大小也是有限制的,一般是1K左右吧,对于上传文件
就不是很适合。

post请求方式是将参数放在消息体内将其发送到服务器,所以对大小没有限制,对于隐私的内容也比较合适。
如下Post请求

POST /LoginCheck HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://192.168.2.1/login.asp
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 192.168.2.1
Content-Length: 39
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: language=en

Username=admin&checkEn=0&Password=admin //参数位置

在android中用get方式向服务器提交请求:

在android模拟器中访问本机中的tomcat服务器时,注意:不能写localhost,因为模拟器是一个单独的手机系统,所以要写真是的IP地址。
否则无法访问到服务器。

//要访问的服务器地址,下面的代码是要向服务器提交用户名和密码,提交时中文先要经过URLEncoder编码,因为模拟器默认的编码格式是utf-8
//而tomcat内部默认的编码格式是ISO8859-1,所以先将参数进行编码,再向服务器提交。
private String address = "http://192.168.2.101:80/server/loginServlet";

public boolean get(String username, String password) throws Exception {
username = URLEncoder.encode(username);// 中文数据需要经过URL编码
password = URLEncoder.encode(password);
String params = "username=" + username + "&password=" + password;
//将参数拼接在URl地址后面
URL url = new URL(address + "?" + params);
//通过url地址打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时时间
conn.setConnectTimeout(3000);
//设置请求方式
conn.setRequestMethod("GET");
//如果返回的状态码是200,则一切Ok,连接成功。
return conn.getResponseCode() == 200;
}

在android中通过post方式提交数据。

public boolean post(String username, String password) throws Exception {
username = URLEncoder.encode(username);// 中文数据需要经过URL编码
password = URLEncoder.encode(password);
String params = "username=" + username + "&password=" + password;
byte[] data = params.getBytes();

URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
//这是请求方式为POST
conn.setRequestMethod("POST");
//设置post请求必要的请求头
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 请求头, 必须设置
conn.setRequestProperty("Content-Length", data.length + "");// 注意是字节长度, 不是字符长度

conn.setDoOutput(true);// 准备写出
conn.getOutputStream().write(data);// 写出数据

return conn.getResponseCode() == 200;
想了解根多信息请登录http://www.xaafeicuie.com/

热点内容
bat删除指定文件夹 发布:2025-01-26 17:41:58 浏览:650
哪些汽车品牌配置防爆胎 发布:2025-01-26 17:39:42 浏览:616
怎么更改苹果密码怎么办 发布:2025-01-26 17:15:55 浏览:272
char在c语言中是什么意思 发布:2025-01-26 16:54:13 浏览:68
sqllabview 发布:2025-01-26 16:53:11 浏览:647
如何成为安卓用户 发布:2025-01-26 16:41:23 浏览:966
宋祖儿小学生编程 发布:2025-01-26 16:39:35 浏览:632
杀手3重庆如何得到密码 发布:2025-01-26 16:27:10 浏览:803
小米5传文件夹 发布:2025-01-26 16:10:58 浏览:539
哪里可以看无线密码 发布:2025-01-26 16:04:41 浏览:264