详见:http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html
$("#getJsonpByJquery").click(function () {
$.ajax({
url: 'http://localhost:2701/home/somejsonp',
dataType: "jsonp", //jsonp格式
jsonp: "callback", //jsonp的回调函数
jsonpCallback:"jsonCallBack", //指定回调函数 需要在后台中做下处理
success: function (data) {
console.log(data)
}
})
}) 完整Demo两种方法:js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsonpAjaxCall.html</title>
<script type="text/javascript" src="/javascript/jquery.js"></script>
<script type="text/javascript">
function jsonCallBack(d){ alert("123"); }
function HuiDiaoMethod(d){console.log(d); }
$(function(){
//第一种方法:更原生些,但毕竟麻烦,需要向Dom树中添加script节点 需要回调函数
$("#send").on('click', function(event) {
//<\/script> 注意这里有一个转义字符 \/
$("<script><\/script>").attr("src","http://10.1.56.153:6631/ajaxcall.ashx?callback=HuiDiaoMethod").appendTo('body');
});
//推荐第二种方法:简单(无需添加script节点 无需要回调函数)
$("#ajax").on("click",function(){
$.ajax({
"url":"http://10.1.56.153:6631/ajaxcall.ashx",
"dataType":"jsonp",
jsonp: "callback", //回调函数在QueryString中的键值,默认是callback。后台Request["callback"] 获取回调函数名称
jsonpCallback:"jsonCallBack", //指定回调函数 需要在后台中做下处理
success: function (data) { //data是json对象 后台最终输出的是 jsonCallBack(data)
console.log(data)
}
});
});
});
</script>
</head>
<body>
<button id="send">getJsonp</button>
<button id="ajax">AjaxgetJsonp</button>
</body>
</html>
备注:
后台返回的数据格式必须是:
MethodName(参数);
参数可以是json格式 也可以不是json格式。 但一定要是上面的格式 否则js会报错。
补充:
Access-Control-Allow-Origin
只有当目标页面的response中,包含了 Access-Control-Allow-Origin
这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。
protected override void Application_BeginRequest(object sender, EventArgs e)
{
//HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
HttpRequest request = HttpContext.Current.Request;
string orig = request.Headers.Get("Origin");
if (!string.IsNullOrEmpty(orig)&& request.UrlReferrer!=null&&!string.IsNullOrEmpty(request.UrlReferrer.Host))
{
var host = request.UrlReferrer.Host;
orig = request.UrlReferrer.Scheme+"://"+ host;
if (request.UrlReferrer.Port != && request.UrlReferrer.Port != )
{
orig += ":" + request.UrlReferrer.Port;
}
//不是 CookieDomain指定的域名下的请求全部拒绝。
if (!host.EndsWith(ConfigurationManager.AppSettings["CookieDomain"]??"localhost",StringComparison.OrdinalIgnoreCase))
{
// TODO:refuse
orig =string.empty;
}
} else if (!ConfigurationManager.AppSettings["Static"].Equals(orig, StringComparison.CurrentCultureIgnoreCase)) { orig = ConfigurationManager.AppSettings["Dynamic"]; } HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", orig); }