javascript版本的ajax发送请求
(1)、创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同
(2)、请求路径
(3)、使用open方法绑定发送请求
(4)、使用send() 方法发送请求
(5)、获取服务器返回的字符串 xmlhttpRequest.responseText;
(6)、获取服务端返回的值,以xml对象的形式存储 xmlhttpRequest.responseXML;
(7)、使用W3C DOM节点树方法和属性对该XML文档对象进行检查和解析。
序言:
近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttp ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因时间原因,并未在所有浏览器上进行测试,目前测试的IE8,9,10,Google Chrome,Mozilla Firefox,Opera常用几款,如大家在进行验证测试发现有问题,请及时反馈与我,谢谢大家。
言归正传,直接上代码:
前端代码
<!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>Ajax练习</title>
<script src=\"/Scripts/jquery-1.4.1.min.js\" type=\"text/javascript\"></script>
<style type=\"text/css\">
label{width:50px;display:inline-block;}
</style>
</head>
<body>
<div id=\"contentDiv\">
<h2>html5表单元素</h2>
<label>E-mail</label><input type=\"email\" name=\"UserEmail\" id=\"UserEmail\" value=\"251608027@qq.com\" /><br />
<label>URL:</label><input type=\"url\" name=\"UserURL\" id=\"UserURL\" value=\"http://www.baidu.com\" /><br />
<label>Number:</label><input type=\"number\" name=\"UserNumber\" id=\"UserNumber\" min=\"1\" max=\"100\" value=\"87\" /><br />
<label>Range:</label><input type=\"range\" name=\"UserRange\" min=\"1\" max=\"100\" value=\"78\" /><br />
<label>Date:</label><input type=\"date\" name=\"UserDate\" id=\"UserDate\" value=\"2015-12-01\" /><br />
<label>Search:</label><input type=\"search\" name=\"UserSearch\" id=\"UserSearch\" value=\"search\" /><br />
<label id=\"lblMsg\" style=\"color:Red; width:100%;\"></label><br />
<input type=\"button\" id=\"btnXmlHttp\" value=\"提 交\" onclick=\"return xmlPost();\" />
<input type=\"button\" id=\"btnAjax\" value=\"Ajax提 交\" onclick=\"return Ajax();\" />
<input type=\"button\" id=\"btnPost\" value=\"Post提 交\" onclick=\"return Post();\" />
<input type=\"button\" id=\"btnGet\" value=\"Get提 交\" onclick=\"return Get();\" />
<input type=\"button\" id=\"btnGetJSON\" value=\"GetJSON提 交\" onclick=\"return GetJSON();\" />
<input type=\"button\" id=\"btnCustom\" value=\"Custom提 交\" onclick=\"return Custom();\" />
<br /><label id=\"lblAD\" style=\"color:Red; width:100%;\">.NET技术交流群:70895254,欢迎大家</label>
<script type=\"text/javascript\">
//基础数据
var jsonData = {
UserEmail: $(\"#UserEmail\").val(),
UserURL: $(\"#UserURL\").val(),
UserNumber: $(\"#UserNumber\").val(),
UserRange: $(\"#UserRange\").val(),
UserDate: $(\"#UserDate\").val(),
UserSearch: $(\"#UserSearch\").val()
};
//统一返回结果处理
function Data(data, type) {
if (data && data.length > 0) {
var lblMsg = \"\";
for (i = 0; i < data.length; i++) {
for (var j in data[i]) {
lblMsg += j + \":\" + data[i][j];
if (j != \"Name\" && j != \"UserSearch\") { lblMsg += \",\" }
}
if (i != data.length) { lblMsg += \";\"; }
}
$(\"#lblMsg\").html(type + \"请求成功,返回结果:\" + lblMsg);
}
}
</script>
<script type=\"text/javascript\">
//javascript 原生ajax方法
function createXMLHttp() {
var XmlHttp;
if (window.ActiveXObject) {
var arr = [\"MSXML2.XMLHttp.6.0\", \"MSXML2.XMLHttp.5.0\", \"MSXML2.XMLHttp.4.0\", \"MSXML2.XMLHttp.3.0\", \"MSXML2.XMLHttp\", \"Microsoft.XMLHttp\"];
for (var i = 0; i < arr.length; i++) {
try {
XmlHttp = new ActiveXObject(arr[i]);
return XmlHttp;
}
catch (error) { }
}
}
else {
try {
XmlHttp = new XMLHttpRequest();
return XmlHttp;
}
catch (otherError) { }
}
}
function xmlPost() {
var xmlHttp = createXMLHttp();
var queryStr = \"Ajax_Type=Email&jsonData=\" + JSON.stringify(jsonData);
var url = \"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random();
xmlHttp.open(\'Post\', url, true);
xmlHttp.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");
xmlHttp.send(queryStr);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var data = eval(xmlHttp.responseText);
Data(data, \"javascript原生xmlHttp\");
}
}
}
</script>
<script type=\"text/javascript\">
//jquery $.ajax方法
function Ajax() {
$.ajax({
url: \"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random(),
type: \"Post\",
async: false,
data: {
Ajax_Type: \"Email\",
jsonData: JSON.stringify(jsonData)
},
dataType: \"json\",
beforeSend: function () { //发送请求前
$(\"#btnPost\").attr(\'disabled\', \"true\");
},
complete: function () { //发送请求完成后
$(\"#btnPost\").removeAttr(\"disabled\");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(\"error!\" + errorThrown);
//alert(\"请求错误,请重试!\");
},
success: function (data) {
Data(data, \"Jquery $.ajax\");
}
});
}
//jquery $.post方法
function Post() {
$.post(\"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random(),
{
Ajax_Type: \"Email\",
jsonData: JSON.stringify(jsonData)
},
function (data) {
Data(data, \"Jquery $.post\");
}
);
}
//jquery $.getJSON方法
function GetJSON() {
$.getJSON(\"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random(),
{
Ajax_Type: \"Email\",
jsonData: JSON.stringify(jsonData)
},
function (data) {
Data(data, \"Jquery $.getJSON\");
}
);
}
//jquery $.get方法
function Get() {
$.get(\"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random(),
{
Ajax_Type: \"Email\",
jsonData: JSON.stringify(jsonData)
},
function (data) {
Data(data, \"Jquery $.get\");
}
);
}
</script>
<script type=\"text/javascript\">
//javascript原生脚本自定义jquery $.ajax方法
var CustomAjax = function (custom) {
// 初始化
var type = custom.type; //type参数,可选
var url = custom.url; //url参数,必填
var data = custom.data; //data参数可选,只有在post请求时需要
var dataType = custom.dataType; //datatype参数可选
var success = custom.success; //回调函数可选
var beforeSend = custom.beforeSend; //回调函数可选
var complete = custom.complete; //回调函数可选
var error = custom.error; //回调函数可选
if (type == null) {//type参数可选,默认为get
type = \"get\";
}
if (dataType == null) {//dataType参数可选,默认为text
dataType = \"text\";
}
var xmlHttp = createXMLHttp(); // 创建ajax引擎对象
xmlHttp.open(type, url, true); // 打开
// 发送
if (type == \"GET\" || type == \"get\" || type == \"Get\") {//大小写
xmlHttp.send(null);
}
else if (type == \"POST\" || type == \"post\" || type == \"Post\") {
xmlHttp.setRequestHeader(\"content-type\", \"application/x-www-form-urlencoded\");
xmlHttp.send(data);
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
if (dataType == \"text\" || dataType == \"TEXT\") {
if (success != null) {
//普通文本
success(xmlHttp.responseText);
}
} else if (dataType == \"xml\" || dataType == \"XML\") {
if (success != null) {
//接收xml文档
success(xmlHttp.responseXML);
}
} else if (dataType == \"json\" || dataType == \"JSON\") {
if (success != null) {
//将json字符串转换为js对象
success(eval(\"(\" + xmlHttp.responseText + \")\"));
}
}
}
};
};
//自定义方法
function Custom() {
CustomAjax({
type: \"Post\",
url: \"/Handler/AjaxHandlerHelper.ashx?no.=\" + Math.random(),
data: \"Ajax_Type=Email&jsonData=\" + JSON.stringify(jsonData),
dataType: \"json\",
success: function (data) {
Data(data, \"Custom自定义\");
}
});
}
</script>
</div>
</body>
</html>
.ashx后端代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;
namespace WebHTML5.Handler
{
/// <summary>
/// AjaxHandlerHelper 的摘要说明
/// </summary>
public class AjaxHandlerHelper : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = \"application/json\";
//context.Response.Charset = \"utf-8\";
var Ajax_Type = context.Request.QueryString[\"Ajax_Type\"] == null ?
context.Request.Form[\"Ajax_Type\"] : context.Request.QueryString[\"Ajax_Type\"];
switch (Ajax_Type)
{
case \"Email\":
context.Response.Write(PostEmail(context));
break;
default:
context.Response.Write(\"[{\\\"Age\\\":28,\\\"Name\\\":\\\"张鹏飞\\\"}]\");
break;
}
}
public static string PostEmail(HttpContext context)
{
string semail = string.Empty;
if (context.Request.HttpMethod == \"GET\")
{
semail = \"[\" + context.Request.QueryString[\"jsonData\"] + \"]\";
}
else
{
semail = \"[\" + context.Request.Form[\"jsonData\"] + \"]\";
}
return semail;
}
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Jquery 方法扩展
关于Jquery的方法扩展大家自行google或百度;
结束语
说明一下情况:案例中出现的html5 range标签的取值问题,写的不对,大家不要在意这些,关于range标签如何取值大家自行google或百度;
本文地址:https://www.stayed.cn/item/23931
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我