本文将介绍c#-使用$.ajax同时运行多个WebRequest的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于ajaxrequestVSnorm
本文将介绍c#-使用$.ajax同时运行多个WebRequest的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于ajax request VS normal request、ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧、AJAX中同时发送多个请求XMLHttpRequest对象处理方法、AJAX使用 以及 AJAX核心:XMLHttpRequest对象的知识。
本文目录一览:- c#-使用$.ajax同时运行多个WebRequest
- ajax request VS normal request
- ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧
- AJAX中同时发送多个请求XMLHttpRequest对象处理方法
- AJAX使用 以及 AJAX核心:XMLHttpRequest对象
c#-使用$.ajax同时运行多个WebRequest
我有2个MVC应用程序需要连接到第3个应用程序.导致问题的代码在两个MVC应用程序中都是相同的.
public bool UpdateServerData()
{
//string BASE_URL = "http://";
string BASE_URL = "http://localhost:55094";
string url = BASE_URL + "/Home/PullLiveData";
WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user
var response = (HttpWebResponse)wr.GetResponse();
return true;
}
public ActionResult GetServerUpdateProgress()
{
//string BASE_URL = "http://";
string BASE_URL = "http://localhost:55094";
string url = BASE_URL + "/Home/UpdateProgress";
WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user
var myobj = new UpdateAJAXProgress();
var response = (HttpWebResponse)wr.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
myobj = (UpdateAJAXProgress)js.Deserialize(objText, typeof(UpdateAJAXProgress));
return Json(myobj);
}
UpdateServerData告诉localhost:55094刷新数据库中的数据.
GetServerUpdateProgress返回进度计数/总计,以便我可以显示数据库刷新的进度栏.
运行UpdateServerData的$.ajax设置为异步工作:true
然后使用setTimeouts,每隔几秒钟运行一次GetServerUpdateProgress,它返回UpdateServerData距完成的距离.
工作应用功能:
不起作用:
因此,在非工作版本中似乎正在发生的事情是,即使ajax正在调用该函数,它也没有运行GetServerUpdateProgress,在UpdateServerData完成之前,它实际上并没有开始处理其中的任何内容.您可以看到ajax同步设置正确,因为在非工作屏幕截图中都显示了加载动画.我在GetServerUpdateProgress的开头放置了一个断点,直到UpdateServerData完成处理后它才触发.
我主要担心的是,可能在webconfig或global.asax中的某些设置是不同的,这就是导致这两个应用程序运行略有不同的原因.有任何想法吗?
以下是一些相关的javascript:
function UpdateData()
{
$("#ChartUpdateProgressWhole").show();
$.ajax({
type: "POST",
async: true,
url: '@(Url.Action("UpdateServerData", "Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
Alert2({
iconfilename: "tick.png",
text: "Database Updated!",
autohide: true,
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
complete:function (jqXHR, textStatus) {
$("#ChartUpdateProgressWhole").hide();
timerStop = true;
LoadChart();
},
});
if (!timerStop) {
CheckProgress();
}
}
function CheckProgress()
{
if(timerStop) {
CheckProgressAjax();
return;
}
window.setTimeout(CheckProgress, 2000);
CheckProgressAjax();
}
function CheckProgressAjax()
{
$.ajax({
type: "POST",
async: false,
url: '@(Url.Action("GetServerUpdateProgress", "Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
var width = (data.Completed * 100)/data.Total;
$("#ChartUpdateProgresspercent").css("width", width);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.responseText);
}
});
}
解决方法:
这里有点困难,但是ASP.NET实际上将使异步请求排队,并在启用会话状态的情况下按顺序处理它们(无疑避免了处理同步问题).
我的建议是,如果可行的话,一起禁用会话状态,如果不可能的话,可以使用以下属性为每个控制器禁用会话状态:
[SessionState(SessionStateBehavior.disabled)]
public class SomeController
ajax request VS normal request
ajax请求(asynchronized)与普通请求(synchronized)的报文头(Header)不同:
StringreqType=request.getHeader("X-Requested-With"); if(null==reqType){//normalrequest} elseif(reqType.equals("XMLHttpRequest")){//ajaxrequest}
1、request headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Connection:keep-alive
Cookie:BD_HOME=0; BD_UPN=12314353; BAIDUID=6D80EC15FB3F7D55F6CF21531B4789A2:FG=1
Host:www.baidu.com
Referer:http://news.baidu.com/
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/47.0.2526.106 Safari/537.36
response headers
BDPAGETYPE:1
BDQID:0xcc5e27ca0001088a
BDUSERID:0
Cache-Control:private
Connection:keep-alive
content-encoding:gzip
Content-Type:text/html; charset=utf-8
Cxy_all:baidu+1e0afc7905a9c9dcea7d6f252627f95b
Date:Fri,06 May 2016 06:35:43 GMT
Expires:Fri,06 May 2016 06:35:22 GMT
Server:bfe/1.0.8.14
Set-Cookie:PSTM=1462516543; expires=Thu,31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie:__bsi=17208040824016918998_00_2870_R_N_6_0303_C02F_N_I_I_0; expires=Fri,06-May-16 06:35:48 GMT; domain=www.baidu.com; path=/
Set-Cookie:H_PS_PSSID=1442_19713_18281_19805_19899_19559_19807_19843_19902_19861_17001_15263_12288; path=/; domain=.baidu.com
Set-Cookie:BIDUPSID=6D80EC15FB3F7D55F6CF21531B4789A2; expires=Thu,31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie:BD_HOME=0; path=/
Set-Cookie:BDSVRTM=0; path=/
transfer-encoding:chunked
vary:Accept-Encoding
X-Powered-By:HPHP
X-UA-Compatible:IE=Edge,chrome=1
2、Ajax异步request headers
Accept:text/javascript,application/javascript,application/ecmascript,application/x-ecmascript,*/*; q=0.01
Accept-Encoding:gzip,en;q=0.6
Connection:keep-alive
Cookie:BAIDUID=6D80EC15FB3F7D55F6CF21531B4789A2:FG=1; PSTM=1462516543; BD_HOME=0; H_PS_PSSID=1442_19713_18281_19805_19899_19559_19807_19843_19902_19861_17001_15263_12288; __bsi=17208040824016918998_00_2870_R_N_6_0303_C02F_N_I_I_0; BIDUPSID=5081A970DD87C74CFFBADF0B28A1AF39; BD_UPN=12314353
Host:www.baidu.com
Referer:https://www.baidu.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/47.0.2526.106 Safari/537.36
X-Requested-With:XMLHttpRequest
Ajax异步response headers
Cache-Control:private
Connection:keep-alive
Content-Length:95
Content-Type:baiduApp/json; v6.27.2.14; charset=UTF-8
Date:Fri,06 May 2016 06:35:45 GMT
Expires:Fri,06 May 2016 07:35:45 GMT
Server:bfe/1.0.8.14
Set-Cookie:__bsi=16943568347195085118_00_0_I_R_1_0303_C02F_N_I_I_0; expires=Fri,06-May-16 06:35:50 GMT; domain=www.baidu.com; path=/
ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧
使用AJAXRequest进行AJAX应用程序开发(1) - 初识AJAXRequest前言
在发布了AJAXRequest类的几个版本之后,渐渐地有许多朋友用上了它,也有许多朋友问我有没有更详细的说明和示例。不过因为时间的问题以及我能想到的示例有限,一直没有多写几个示例。考虑了一下,决定写一个关于AJAXRequest的教程,希望对使用AJAXRequest类的朋友们有所帮助。
准备
在使用AJAXRequest进行AJAX开发之前,你需要做以下准备:
准备知识:JavaScript基本语法,文档对象模型(DOM)的相关知识,以及至少掌握一种后台编程的语言(我写的例子以ASP为编程语言)。
准备工具:EditPlus或者其他文本编辑器(Dreamweaver或者Visual Web Developer也可以),以及本地测试用的Web服务器(IIS或者Apache或者NetBox或其他都可以)。
下载AJAXRequest类:你可以在http://www.xujiwei.cn/works/ajaxrequest/下载到最新版的AJAXRequest类。
要进行AJAX开发,你需要了解JS编程,这是AJAX中J的需要,以及后台编程,这是需要在服务端进行动态处理,DOM用来处理信息,将结果呈现给用户。而工具方面,文本编辑器可以选择你自己喜欢的,我比较喜欢用EditPlus。
至于测试用的Web服务器,就取决于你所用的后台编程语言了,如ASP或ASP.NET是IIS,PHP可以选择Apache等。运行ASP的另外一个选择是NetBox,不过NetBox对UTF-8支持不太好,如果不涉及非英文的输出,可以考虑选择这个轻量级的服务器软件。
至于为什么要在本地建立测试服务器而不是直接在浏览器中运行,是因为从一开始就在与服务器相近的环境中开发,可以在以后的开发过程中减少许多莫名的错误。
开始
在之后教程的例子中,我都将以JS代码与XHTML代码分开的方式来书写,其中AJAXRequest类文件ajaxrequest.js放在例子代码的同一目录下。
Hello,World!
按照惯例,以一个“Hello,World!”来开始。
helloworld.htm
程序代码:
<!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>
<meta name="author" content="xujiwei" />
<meta name="copyright" content="www.xujiwei.cn" />
<meta name="description" content="hello,world" />
<title>Hello,World!</title>
<!-- 包含AJAXRequest类文件 -->
<script type="text/javascript" src="ajaxrequest.js"></script>
<!-- 包含页面需要的JS代码 -->
<script type="text/javascript" src="helloworld.js"></script>
</head>
<body>
<!-- 一个按钮,单击调用函数showHello,显示欢迎信息 -->
<button onclick="showHello();">显示Hello,World!</button>
</body>
</html>
在helloworld.htm中,我们在页面上放置了一个button,用于触发showHello函数,显示从服务端获取的信息。
helloworld.js
程序代码:
// 创建AJAXRequest对象,以全局变量的方式来保存这个对象,这样在整个页面应用程序中就只需要创建一次AJAXRequest类对象,而不用重复创建。
var ajax=new AJAXRequest();
/////////////////////////////////////////
// showHello
// 描述:向服务端发送请求并显示返回信息
// 参数:无
// 返回:无
/////////////////////////////////////////
function showHello() {
// 使用get方法向服务端获取文件helloworld.txt的内容,
// 并在函数mycallback中进行处理
ajax.get("helloworld.txt",mycallback);
}
/////////////////////////////////////////
// mycallback
// 描述:向服务端发送请求并显示返回信息
// 参数:obj - XMLHttpRequest对象,保存服务端返回信息
// 返回:无
/////////////////////////////////////////
function mycallback(obj) {
// 用alert来显示服务端返回的内容
// obj.responseText为helloworld.txt的内容
alert(obj.responseText);
}