给高分,请求解决javascript get请求的问题

已解决--向本地server.js服务器发出GET请求并接受服务器生成的随机数(编程语言:JavaScript) - CNode
努力在web路上走的更远。
发布于 5个月前
387 次浏览
该问题已经解决,感谢关注此问题的人。以下是一种我尝试过的解答方案:
关键:定义XMLHttpRequest对象
说到随机数,Math.random()获得的实伪随机数,实战中建议使用crypto模块创建随机数。
参考文章:
我问题的意图是接受本地服务器生成的随机数。我不懂的事如何请求和接收数据
楼主,发帖之前,先瞄一眼markdown的文档,#论如何优雅的在cnode帖子里发代码#
好的,刚到,不好意思。
服务器搭建在
,存储赞助商为您现在的位置: &
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
需要使用的 jquery.history.js插件 在巨人的肩膀之上,以下前进后退工作基于插件完成! 做了几个兼职,上天帮人完成页面的时候顺便做了一个ajax的请求。发现浏览器的刷新,后退,前进按钮失效。于是乎google了一下。发现了一些解决方法。其中一个jquery.hashchange.js的插件有的时候会失效,有的时候会造成页面多次请求。 换另外一个插件测试下,完美达到我的要求。 总的思路,在url上加上参数,一切工作基于这个参数完成。   复制代码 代码如下:  //截取传入字符串中第一次出现的需要的字符串。fieldName+tag 和endTag之间的内容 function getQueryString(url,fieldName,tag,endTag){ var urlString =//document.location. if(urlString != null){ var typeQu = fieldName+ var urlEnd = urlString.indexOf(typeQu); if(urlEnd != -1){ var paramsUrl = urlString.substring(urlEnd+typeQu.length); var isEnd = paramsUrl.indexOf(endTag); if(isEnd != -1){return paramsUrl.substring(0, isEnd);} else{return paramsU} } else {} } else{} } //设置默认页面 function setDefaultPage(){ $("#contul ul"l(""); $("#contul").hide(); $("#cont").show(); $("#top span").find("a").removeClass("active"); $("#top span:eq(0)").find("a").addClass("active"); } //检测最终字符 function checkCode(getParme){ if (getParme!=null){ getParme=getParme.toUpperCase(); var codeNum=getParme.charCodeAt(0) } if(codeNum&=65&&codeNum&=91){ $("#top span").find("a").removeClass("active"); //alert((codeNum-64)); $("#top span:eq("+(codeNum-64)+")").find("a").addClass("active"); //$("#cont"l(""); $("#cont").hide(); $("#contul").find("ul"l(""); runAjaxGetCode(getParme); }else{ setDefaultPage(); } } //执行ajax操作 function runAjaxGetCode(getParme){ //$("#cont").fadeOut('fast',function(){ $.ajax({ cache:false, type:'get', url:'sxml/searchByWord'+getParme+'.xml', beforeSend:function(XMLHttpRequest){ $('&div class="quick-alert"&数据加载中,请稍后&/div&') .insertBefore( $("#cont") ) .fadeIn('slow'); }, success: function(data,textStatus){ $("#contul").show().find("ul"l(""); $(".quick-alert").fadeOut('slow', function(){ $(this).remove(); $("item",data).each(function(i, domEle){ $("#contul ul").append("&li&&a +$(domEle).children("link").text()+"'&"+getParme+":"+$(domEle).children("title").text()+"&/a&&/li&"); if(($(this).index()-6)%6==0){ $("#contul ul").append("&div class='clear'&&/div&"); } }); }); }, error: function(){ alert("对不起,数据获取失败,请F5刷新页面重新尝试\如果问题仍然存在请联系网站管理员解决。"); } }); // }); } //获取参数 function getParmeter(){ getParme=getQueryString(urlParem,'#javascript=tagCode("','','")'); checkCode(getParme); } //getParmeter(); //点击触发 $("#top span:gt(0)").click(function(){ $(".quick-alert").remove(); }); //初始化 $.history.init(function(url) { //load(url == "" ? "1" : url); if(url.length&0){ getParme=getQueryString(url,'javascript=tagCode("','','")'); if (getParme!=null){ getParme=getParme.toUpperCase(); checkCode(getParme); } } else{ setDefaultPage(); } }); //页面上其他操作 var getP //function getHash(){ //var curHash = location. //alert(curHash); //} var urlP urlParem=document.location. var topH var topHtmlLink=""; var $_objT $_objTop=$("#top") topHtml=$l(); for(var i=65;i &91;i++) { topHtmlLink+="&span&&a #javascript=tagCode(\""+(String.fromCharCode(i+32))+"\")'&"+String.fromCharCode(i)+"&/a&&/span&"; } $l(topHtml+topHtmlLink); jquery.history.js插件 Demos Some demos are available here and included in the repository. And this site itself is built on the plugin:   复制代码 代码如下:  (function($){ var origContent = ""; function loadContent(hash) { if(hash != "") { if(origContent == "") { origContent = $('#content'l(); } $('#content').load(hash +l", function(){ prettyPrint(); }); } else if(origContent != "") { $('#content'l(origContent); } } $(document).ready(function() { $.history.init(loadContent); $('#navigation a').click(function(e) { var url = $(this).attr('href'); url = url.replace(/^.*#/, ''); $.history.load(url);
}); }); })(jQuery);
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-在开发环境中,ReportViewer的工作一切正常,可发布到服务器IIS上时就出现Javascript的脚本错误
服务器环境:Windows Server 2008+IIS7+.net framework 3.5
google了一些资料,终于从找到了解决的方法。
这里再叙述一下过程
打开IIS7选择“网站”下面你发布的网站在管理配置界面中选择“处理程序映射”-〉“添加托管处理程序”在“添加托管处理程序”界面中如下设置
&&&&&&请求路径:Reserved.ReportViewerWebControl.axd
&&&&&&类型:Microsoft.Reporting.WebForms.HttpHandler
&&&&&&名称:Manually-added AXD Handler For Reporting Services(可自己取)
&& 4.& 点击“请求限制”按钮
&&&&&&映射tab中不要勾选
&&&&&&谓词tab中选择“下列谓词之一”填入:GET,HEAD,POST,DEBUG
&&&&&&访问tab中脚本一定要选
&&&5.点击OK,OK完成设置
(所有操作都是在服务器环境下)
阅读(...) 评论()javascript如何来实现跨域发请求??
javascript如何来实现跨域发请求??
我想在别人的网站中的某一个网页,中加入一段js代码,实现给我的服务器端发送一个http请求?不知道有没有好的方案?请求高手指点。最好详细点谢谢了
补充:朋友谢谢你的答案,但是我的意思是这样的。我在另外一个网站(比如:中有一个js 是获取当前网页中的所有数据,如何发送到我的服务器端(比如我域名:),关键就是这段js怎么去写最好呢?,简单的用<script src> 好像达不到我的目的。 因为我还要返回给这个第三方服务器,这个页面一部分数据。  有没有更好的解决方案呢?  谢谢你了。 ajax。
补充:哥们 你out了 当然可以在别人页面插入代码。因为是搞合作的。呵呵
你想在别人的主页上插入代码 ,你觉得可能么?
你用js修改一个img或者iframe的src(隐藏的元素)
然后在参数上加上你获取的值就行了
&img src="" style="display:" id="sub"/&
var x=“xxxxxx”;//假设要把这个x(x的值是ajax得来的)变量提交到
document.getElementById("sub").src=" "+x;
//后续代码。。。
可以直接用img,地址后面直接跟参数就行了
如&img src=" &&sid=&%=sid%&" alt=" "/&
其他回答 (2)
javascript 跨域请求的两种方法
还在为javascript跨域访问头疼么?
以下两种解决方案或许可以帮你解忧:
1. 使用跳转请求页
使用跳转页不做详细介绍了,原理比较简单,因为服务器端脚本不存在跨域访问,所以在当前域名下新增一个页面来进行请求当前域外的页面,进而获得所需数据,给当前域下的页面使用。
就相当于是,我要给国外的一位朋友送一个礼物,但是我没有获得签证(浏览器的许可),不能出国,所以只好委托一个快递公司来帮我做这件事了,区别是雇佣快递公司需要钱,多写个跳转页面成本没那么高 :)
2. 远程加载 javascript 方法
单独使用javascript的xmlhttp请求(也就是AJAX技术)其他域名下的页面时,会有权限问题。
浏览器对javascript本身加载js并没有跨域问题,例如
&script type="text/javascript" src="
"&&/script&中的src可以是任意的地址(域名可以不是当前请求的页面的域名)。
因此,我们可以利用这一点来进行javascript的跨域请求。
示例代码:a.html
1&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " 2&html xmlns="
&title&&/title&
&script type=”text/javascript”&
function fnShowResult(strResult){
//TODO:strResult是通过jsp获取到的数据,当然这个函数可以有多个参数
18&/script&
22&div&相关咨询:&/div&
2526&script type="text/javascript" src="
?cnt=10"&&/script&
其中,src的地址 就是远程需要加载的javascript代码页面。
这个test.jsp中可以实现你所需要读取数据的操作,并组织成javascript代码输出。
示例代码:test.jsp
&%@ page language="java" contentType="text/charset=gbk" session="false" %&
&%@ page import = "java.lang.Integer,java.util.* %&
&%request.setCharacterEncoding("utf-8");%&
String strCnt = request.getParameter("cnt");
int nCnt = 10;
if(strCnt != null)
nCnt = Integer.parseInt(strCnt);
String strContent = "";
for(int i=0; i&nC i++){
strContent += "&div&这里是测试数据_"+i+"&/div&";
String strScript = "fnShowResult('"+strContent+"');";
&%=strScript%&
这样,在test.jsp中读取所需数据之后,就调用a.html中已经定义好的fnShowResult函数来进行数据的展示了。哈哈,这样是不是很好玩?
不过,需要注意的是这种方法在给test.jsp提交数据参数时,是使用了get方法来提交信息,而get方法每次提交的信息不能超过 2k,不过在大部分应用2K都还够用,不是吗?
朋友谢谢你的答案,但是我的意思是这样的。我在另外一个网站(比如:中有一个js 是获取当前网页中的所有数据,如何发送到我的服务器端(比如我域名:),关键就是这段js怎么去写最好呢?,简单的用<script src> 好像达不到我的目的。 因为我还要返回给这个第三方服务器,这个页面一部分数据。  有没有更好的解决方案呢?  谢谢你了。 ajax。
你的这个要求貌似实现不了。这已经不是跨域的问题了。
相关知识等待您来回答
编程领域专家JavaScript 跨域访问的问题和解决过程 - 听说读写 - 博客园
随笔 - 158, 文章 - 2, 评论 - 470, 引用 - 0
分享一下最近用jQuery跨域请求的经历,&
希望能给大家一些关于这个方案的概念和资料。
该部分包括客户端和服务器端,(如果服务器不在自己手上,那么还是考虑通过自己的服务器转发请求吧)&
1.原本的代码很简单。。如果是同域名什么问题都没有 (有兴趣的朋友可以尝试在自己的服务器上运行以下代码)
url: "/", //不同域名,而且google 没有允许第三方提交所以会出错
cache: false,
//data: params,
dataType: 'json',
success: function (data) {
console.log(data);
error: function (e) {
alert(e.statusText);
嗯,我的默认浏览器是Chrome, 上去一跑。。。当然不能用。。。什么都还没做呢,就想做跨域访问这么危险的事情
下面是Chrome给出的错误提示&
2.在服务器端做点手脚,
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); // 可以设置为详细的地址
3. 好了现在Chrome中的Get已经可以运行了,依葫芦画瓢开发了Post方法。。。。发现Post不能用。。。。- -# 真是不顺利啊
在Fiddler中发现客户端提交的是OPTIONS的请求。。。。恩。。。。。那就加一段逻辑处理OPTIONS
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); // 可以设置为详细的地址
if (HttpContext.Current.Request.HttpMethod == "OPTIONS") // 加点逻辑
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept,X-Requested-With");
HttpContext.Current.Response.End();
实际运行中有两次请求 第一次是OPTIONS 第二次才是POST
4.还有问题。。。。忽然发现在IE8和IE9中无法运行,而在其他的浏览器中都正常(opera未测试,google说这个浏览器也有问题。不过这东西比较小众)
使用Fiddler发现 这个动作根本没有被提交到服务器端。。。。
经常Google以后发现。。。。IE8以上的版本跨域提交需要使用XDomainRequest 对象。。。。(IE 为什么每次你都这么另类!,jQuery你为什么不兼容ie8和ie9的跨域提交功能。。加点代码很麻烦么!!!)
var xdr = new XDomainRequest();
xdr.onload = function (e) {
var data = $.parseJSON(xdr.responseText);
if (data == null || typeof (data) == 'undefined') {
data = $.parseJSON(data.firstChild.textContent);
xdr.onerror = function (e) {
xdr.open("GET", url);
xdr.send();
关于 XDomainRequest 请在这里查看详细,
5.恩 get功能在ie中也可以了。。。不错不错, POST还不行。。。莫非又是IE的问题?? 这。。怎么每个功能都这么多问题?
奇怪的是Fiddler中显示IE8 中POST请求确实发出去了啊。。。怎么回事??
把问题分解来看,吧fiddler获取的http request raw数据拿出来 单独提交试试。。。也不行?! 服务器返回415。。。 看来好像不是ie的问题。(这次冤枉了它了)
仔细排查,发现缺少Content-Type(Content-Type其实不是必须的,参考RFC)
这坑爹的WCF 3.5啊, 不传Content Type就给我报415异常 &(WCF 4.0已经解决这个问题,3.5解决起来很麻烦,我一怒之下用了普通的ashx来处理)
.....嗯。。。少什么我加什么。。。 what?!!!&XDomainRequest 不能随便设置header, & &
var xdr=new XDomainRequest ();xdr.contentType="application/json"; //异常。。。。。。。xdr.contentType = "text/plain";
//这是唯一可以设置的值。。。。MS。。。我要json不要这个。。。。
好吧javascript这边设置失败了。。只能去服务器动手脚。。。想死的心都有了。。。。做点功能怎么这么麻烦。。。
到此为止,总算告一个段落了。。。
用来解决跨域问题的,服务器端代码
public class Global : System.Web.HttpApplication
protected void Application_BeginRequest(object sender, EventArgs e)
if (HttpContext.Current != null && HttpContext.Current.Response != null)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); // take care
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept,X-Requested-With");
HttpContext.Current.Response.End();
服务器也可以通过放置crossdomain.xml在根目录下指定该逻辑,参考&
附录2 用来解决客户端问题的参考代码(代码比较潦草,不过重要的是逻辑)
function cloverGet(url, params, isRenderLoading, callback) {
if ($.browser.msie && parseInt($.browser.version, 10) &= 8 && window.XDomainRequest) {
var xdr = new XDomainRequest();
xdr.onload = function (e) {
var data = $.parseJSON(xdr.responseText);
if (data == null || typeof (data) == 'undefined') {
data = $.parseJSON(data.firstChild.textContent);
//需要手动处理json数据
xdr.onerror = function (e) {
xdr.open("GET", url);
xdr.send();
cache: false,
data: params,
dataType: 'json',
success: function (data) {
error: function (e) {
complete: function (e) {
beforeSend: function (xhr) {
}}function cloverPost(url, params, callback) {
if ($.browser.msie && parseInt($.browser.version, 10) &= 8 && window.XDomainRequest) {
var xdr = new XDomainRequest();
xdr.contentType = "text/plain";
xdr.onload = function () {
var data = $.parseJSON(xdr.responseText);
if (data == null || typeof (data) == 'undefined') {
data = $.parseJSON(data.firstChild.textContent);
//需要手动格式化
xdr.onerror = function (e) {
xdr.open("POST", url);
xdr.send(params); //这里的数据是 a=1&b=2这样的
type: "POST",
data: params,
// dataType: "json",
//有的时候jsonp也是一个选择
crossDomain: true,
success: function (data) {
error: function (e) {
complete: function (e) {
beforeSend: function (xhr) {
get和post都行了。。。还有文件上传呢。。。这样的POST是不能传文件的。。 (考虑用第三方方案或者不要直接提交)
善用工具 例如Fiddler 还有javascript/HTML调试工具 (我个人觉得Chrome和FF的调试器比较好用)似乎不少人还习惯用alert调试。。。。
&IE和safari 跨域iframe有问题, 记得设置header,例如:&Response.Headers["p3p"] = "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT";
有兴趣的朋友可以了解一下XSS和CSRF,这可是网站的一大安全问题
分解问题是排查问题的一个很好的办法
更多的时候,使用同域名的代理服务器是很好的解决方案 (也是唯一的解决方案,如果浏览器直接调用第三方有权限问题的话)
本人水平有限,如果有所遗漏和谬误,请各位朋友指正,希望一起讨论学习和进步}

我要回帖

更多关于 javascript异步请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信