脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest",脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 关键字:jsonp
jsonp的原理:同源约束限制了js脚本的跨域访问,但是<script>和<iframe>的src标签引用的js文件(只要响应正文是符合js语法的文本即可,不一定是js文件),没有限制。
简述:
浏览器端定义callback函数,名字可以随意,暂且把它就叫callback,然后把改名字传给跨域(刚好可以跨域,也可以是同域,即实现了非XMLHttPRequest也可以ajax),
服务器的响应正文,是callback函数的调用,注意整个正文都需要符合js语法,这样巧妙的实现了跨域。
上代码,自己写的demo,在别人的代码上有改进:
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" InherITs="WebApplication2.WebForm1" %>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
VAR url = "https://www.a.COM:8065/Handler1.ashx?c=callback"; //www.a.com本系统目录的hosts中配置下即可,映射到127.0.0.1
function p(src) {
//参数r是避免ie浏览器的缓存,在IE中如果短时间请求相同的url,不会从服务器读取,而是从缓存读取
var u = src + "&r=" + parseint((Math.random() * 100000000000000000));
var d = document.createElement("script");
d.setattribute("type", "text/javascript");
d.src = u;
document.body.appendChild(d);
}
function callback(d) {
document.getElementById("e").innerHTML = d;
}
window.onload = function () {
p(url);
};
</script>
</head>
<body>
<form id="form1" runat="server">
<p>test
<span id="e"></span>
<input type="button" value="重新请求" title="重新请求" onclick="p(url)" />
</p>
</form>
</body>
</html>
复制代码
www.a.com:8066的handler1.aspx.cs的代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/javascript";//该值不影响结果
var c=context.Request["c"];
context.Response.Write(c + "('" +Guid.NewGuid().ToString()+ "')");//注意传给callbak函数的参数,是js语法,所以要加引号
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!
以上是脚本宝典为你收集整理的javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"全部内容,希望文章能够帮你解决javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。