深入理解jquery跨域请求方法


Posted in Javascript onMay 18, 2016

项目中关于ajax jsonp的使用,

出现了问题:可以成功获得请求结果,但没有执行success方法

总算搞定了,记录一下

function TestAjax()
 {
  $.ajax({
    type : "get",
    async : false,
    url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10
    data : {id : 10},
    cache : false, //默认值true
    dataType : "jsonp",
    jsonp: "callbackfun",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
    jsonpCallback:"jsonpCallback",
      //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
      //如果这里自定了jsonp的回调函数,则success函数则不起作用;否则success将起作用
    success : function(json){
      alert(json.message);
    },
    error:function(){
      alert("erroe");
    }
  });
}

function jsonpCallback(data) //回调函数
{
  alert(data.message); //
}
 

public class ajaxHandler : IHttpHandler
{
  public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    string callbackfun = context.Request["callbackfun"];
    context.Response.Write(callbackfun + "({name:\"John\", message:\"hello John\"})");
    context.Response.End();
  }
  public bool IsReusable {get {return false;}
}

ajax请求参数说明:

dataType string 服务器返回的数据类型。

如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。

可用值:

"xml": 返回 XML 文档,可用 jQuery 处理。

"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。

"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。

注意:在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)

"json": 返回 JSON 数据 。

"text": 返回纯文本字符串

"jsonp":jsonp格式。使用jsonp形式调用函数时,

访问url时会自动将url后面添加上如"callback=callbackFunName" 以执行回调函数(callbackFunName)。

jsonp string

在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种get或post请求中url参数里的"callback"部分,

比如 jsonp:'callbackfun' 则将会生成"callbackfun=?"传给服务器。

jsonpCallback String  此参数为jsonp请求指定一个回调函数名。

这个值将用来取代jQuery自动生成的随机函数名。 即上面"callback=?"中的问号部分

这主要用来让jQuery生成度独特的函数名,这样请求更容易,也能方便地提供回调函数和错误处理。

也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。

 ajax jsonp与普通的ajax请求的主要区别在于——请求响应结果的处理。如上面代码所示的响应结果为:

  jsonpCallback({ name:"world",message:"hello world"});

实际上就是调用jsonp回调函数jsonpCallback,并将要响应的字符串或json传入此方法,

关于自定了jsonp的回调函数, success函数则不起作用

大概其底层的实现(当然这是默认的回调函数的时候,否则就不会执行success的方法吧):

function default_jsonpCallback(data)
{
  success(data); //在默认的回调方法中执行
}

最后一个比较简单的方法,

$.getJSON("GetUserbyName.aspx?name=ww&callback=?",
function(date)
{
//....
}
)

以上这篇深入理解jquery跨域请求方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
html读出文本文件内容
Jan 22 Javascript
Javascript条件判断使用小技巧总结
Sep 08 Javascript
基于jquery的不规则矩形的排列实现代码
Apr 16 Javascript
jQuery的Ajax的自动完成功能控件简要说明
Feb 22 Javascript
jQuery响应enter键的实现思路
Apr 18 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
Nov 17 Javascript
node.js读取文件到字符串的方法
Jun 29 Javascript
图解prototype、proto和constructor的三角关系
Jul 31 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
layui上传图片到服务器的非项目目录下的方法
Sep 26 Javascript
判断是否存在子节点的实现代码
May 18 #Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 #Javascript
Bootstrap教程JS插件弹出框学习笔记分享
May 17 #Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 #Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
May 17 #Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 #Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 #Javascript
You might like
PHP Pear 安装及使用
2009/03/19 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
python K近邻算法的kd树实现
2018/09/06 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
职工小家建设活动方案
2014/08/25 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
实习工作表现评语
2014/12/31 职场文书
体育教师个人总结
2015/02/09 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
小学生暑假安全公约
2015/07/14 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
Mysql 一主多从的部署
2022/05/20 MySQL