jquery ajax的回调函数function()里面的参数可以使用哪些 又分别代表啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery ajax的回调函数function()里面的参数可以使用哪些 又分别代表啥意思?相关的知识,希望对你有一定的参考价值。

我看到有的 $.ajax(url,data,function(msg)) 有的是 $.ajax(url,data,function(data)) 还有的是$.ajax(url,data,function(data, textStatus)) 等等参数 这个参数是怎么设定的,分别代表 服务端传过来的哪些数据?

url是你所要提交异步请求时的地址,也就是action,
data则是你提交异步请求时的数据,也就是你向服务器端所要发送的数据,
function(data/msg)里面的参数,其实不论你写什么都可以的,仅仅是一个变量,它是你异步请求后,服务器端给你返回的数据,它可以使json,xml,html等等如果有时间的话建议你w3cschool学习哦,里面有很多内容都很详细的,希望能帮到你!
参考技术A $.ajax(url,data,function(msg)) msg 是代表服务器传来的是字符串。$.ajax(url,data,function(data)) data代表传来的是json 数据,要序列化之后才能拿到数据。$.ajax(url,data,function(data, textStatus)) data 代表也是json 数据,textStatus 的值为success 代表连接成功,不是这个代表连接失败 参考技术B 我也是初学。
你这里的写法如果是$.ajax的话,那用的是底层函数,其参数可选,应该都是键值对的形式,所有可能的参数列表在这里:http://api.jquery.com/category/ajax/low-level-interface/ 。
像上面这种写法得是.load .get .post 吧,这样的话,参数意义可参考http://api.jquery.com/jQuery.get/ ,里面的 function就是 success(data, textStatus, jqXHR)。这三个参数的分别意义是:服务端送回来的数据,服务端的返回码,XMLHTTPRequest的一个超集
参考技术C $.ajax(url,data,function(msg))与$.ajax(url,data,function(data)) 是一个意思,都是表示传来的数据。只是取名不一样而已。$.ajax(url,data,function(data, textStatus)) :这个地方的第一个是传来的数据,第二个是判断状态吧。参数其实是根据个人的需要而设定的。没有固定的。 参考技术D    (1)ajax整体格式为:$.ajax(
  type: '',
  cache:false,
  url: url,
  data: data,
  success: function (json)
  ,
  error: function (XMLHttpRequest, textStatus, errorThrown)
  alert(textStatus);
  alert(errorThrown);
  ,
  dataType: ""
  );
  (2)上述(1)中回调函数function有当数据返回success即返回正确的json格式时参数1为获得json数据,第二个返回错误error时,参数1为获得返回的数据,参数2为状态码,参数3为抛出错误信息

jQuery: Deferred

jQuery(五): Deferred

有啥用

通常来说,js请求数据,无论是异步还是同步,都不会立即获取到结果,通常而言,我们一般是是使用回调函数再执行,而 deferred就是解决jQuery的回调函数方案,总的来说,deferred对象就是为了将某个回调函数延迟到某个时机再执行.

  1. ajax链式写法:

      //一般写法:
      $.ajax(
            url: '',
            success: function(),
            error: function(),
      )
    
      //deferred
      $.ajax(url)
            .done(function()) //相当于success
           .fail(function())
  2. 指定同一操作的多个函数,允许添加多个函数
    写法也很简单,直接添加在后面就可以了。

     $.ajax(url)
            .done(function())
            .fail(function())
            .done(function())
  3. 为多个函数添加指定回调,可以为多个不同的函数添加同一个回调事件

      $.when($.ajax(url),$.ajax(url2))
            .done()
            .fail()
    为两个函数执行操作,如果都成功了就执行done中的回调,如果有一个失败或全部都失败,就执行fail中的回调
  4. 普通操作的回调
    deferred允许任何操作都可以使用deferred对象的方法,指定回调函数

     var wait = function(de)
          var test = function()
              console.log('开始');
              de.resolve();
            
        setTimeout(test, 3000);
        return de;
      
    
      $.when(wait($.Deferred()))
          .done(function()
                console.log('已完成')
          )
          .fail(function()
                console.log('失败')
          )

注意: $.when()的参数只能是deferred对象。

咋处理

  1. 关于resolve && rejected
    在上面的时候,会注意到一个resolve,并且会觉得这种链式写法很眼熟,且对promise有一个简单了解的话,大概就知道了。

       promise: 同样也是用于处理异步函数,将异步操作队列化处理
    
       简单的promise
       new promise (function(resolve,rejected)
           resolve('成功')
       )
       .then(function())
    
       promise.then 接受两个参数: 
       一、 resolve 代表成功时调用的函数
       二、 rejected 代表失败时调用的回调
       promise的三个状态值: pending(初始状态值), fulfilled(操作成功),rejected(操作失败)
    $.deferred 同样也是有三个不同的状态:未完成,已完成,已失败,当状态处于已完成(resolve)下回自动调用done()中的回调函数,而resolve()就是人为将状态值修改为已完成,同理可证rejected();
    总的来说,核心就是:根据不同的状态值调用回调。
  2. API
    * $.Deferred()
    * $.when()
    * deferred.progress()
    * deferred.promise()
    * deferred.done()
    * deferred.fail()

学习下

来看下jQ的源码是怎么处理的:

    Deferred: function(func) 
      var tuples = [
        // action, add listener, callbacks,
        // ... .then handlers, argument index, [final state]
        ["notify", "progress", jQuery.Callbacks("memory"),
          jQuery.Callbacks("memory"), 2
        ],
        ["resolve", "done", jQuery.Callbacks("once memory"),
          jQuery.Callbacks("once memory"), 0, "resolved"
        ],
        ["reject", "fail", jQuery.Callbacks("once memory"),
          jQuery.Callbacks("once memory"), 1, "rejected"
        ]
      ],
      state = 'pending',

      // 延迟对象
      deferred = ,
      promise = 
        state: function() 
          return state
        ,
        then: function(),
        promise: function(obj) 
          return obj != null ? jQuery.extend(obj, promise): promise;
        
      
      ...
    

从代码来看,定一个了数组tuples,以及初始状态值。tuples存储了三个状态下的所需参数,来看下存储了写什么内容:
[状态, 对应的处理函数, 利用callbacks创建的回调队列, then方法的回调队列, index, 最终的状态值],
我们可以看到最终的状态值只有reject 和resolve才有。
ok,已经知道deferred的本质是根据不同的状态调用不同的方法,并且使用callbacks添加函数,那么把tuples遍历一下,生成队列;
源码:

    tuples.forEach(function(tuple)
      var list = tuple[2], // 获取到jQuery.callbacks返回,创建一个队列
        stateString = tuple[5], //获取到最终状态描述
        
        //promise[ progress | done | fail ] = list.add
        promise[tuple[1]] = list.add;
        
       // 如果最终状态值存在,即处于 reject|| resolve 状态下;
      if (stateString) 
        list.add(
          function() 
            state = stateString;
          
          ....
        )
      
      // 延迟对象状态 deferred.resolve()
      //deferred[ 'resolve' | reject | notify] = function()

      deferred[tuple[0]] = function() 
        deferred[tuple[0]+"Width"](this === deferred ? promise : this, arguments);
        return this;
      
      
      //jQuery.callbacks.fireWith
      //执行队列,调用处理函数,绑定执行时的上下文
      deferred[tuple[0] + "With"] = list.fireWith;
    )
    promise.promise(deferred);
    return deferred;

已经遍历生成了3个队列,并将三个状态方法挂载在了延迟对象上。
从代码中可以看出,在调用deferred[ reject | resolve]时,其实是调用了deferred[ rejectWith | resolveWith]方法,本质上是对callbacks.fireWith的调用,以用来执行添加的回调函数,同时设置函数的上下文。
并且可以看的到,deferred[proress | done | fail] 其实是copy了callbacks.add方法,将回调函数添加在了执行队列中。

另外关于对jQuery.deferred对象的详解,使用,https://www.cnblogs.com/chris-oil/p/8922770.html 这篇博文转载了阮大神的,可以瞅瞅

以上是关于jquery ajax的回调函数function()里面的参数可以使用哪些 又分别代表啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax回调函数不执行

如何在jquery ajax成功回调函数中传递上下文

Jquery ajax回调函数不执行

转: jquery中ajax回调函数使用this

Jquery:在返回之前等待回调

如何使用 jQuery 在 JSON ajax 请求中回调 404 上的函数?