Zepto的$ .post没有错误处理程序

时间:2015-12-31 08:19:36

标签: javascript jquery ajax xmlhttprequest zepto

我在我的应用程序中使用Zepto作为jQuery的替代,当我意识到$.ajax有错误处理程序时,我正在处理任务,但其他方法如{ {1}},$.post没有它。

这可能是什么原因?

功能签名

  

$ .post(url,[data],function(data,status,xhr){...},[dataType])

     

$。get(url,[data],[function(data,status,xhr){...}],[dataType])

参考

  1. $.ajax
  2. $.post
  3. $.get

4 个答案:

答案 0 :(得分:4)

根据您关于$.get$.post的问题。是的,source code on github回答此方法没有错误处理程序,但您可以在$.ajaxSettings

中添加常见错误处理程序

而非$.ajax使用回调更好地使用Zepto deferred API。您必须包含it manually

它提供了$.Deferred promises API。取决于“回调”模块。 包含时,$.ajax()支持用于链接回调的promise接口。

使用延迟,您可以捕获延迟/承诺链中的错误:

$.post(/*any options*/).done(/*success handler*/).fail(/*error handler*/)

$.post().then(function() {
   // success code here
}, function() {
   // error code here
});

答案 1 :(得分:1)

这不是一个错误,它只是如何设计Zepto模拟的jQuery API(参见例如https://api.jquery.com/jquery.get/)。

如果你需要回调,请使用$ .ajax,全局回调或承诺。

答案 2 :(得分:0)

在我看来,错误处理程序不可用,因为它会增加混乱 当前的功能规范:

$.get(url, [data], [function(data, status, xhr){ ... }], [dataType])

添加错误处理程序时,param将转换为:

$.get(url, [data], [function(data, status, xhr){ ... }], [function(data, status, xhr){ ... }], [dataType])

如果是一个额外的错误处理程序参数,那么在进行ajax调用时很难理解你的处理程序:

$.get('http://example.com', {query: 1}, function(result) {
    //Handle the request
});

在这种情况下,处理程序是出错还是成功?这很难理解。当然你可以在params中添加一些额外的null,但它不是一个干净的解决方案并且会增加混乱。

$ .ajax有一个错误处理程序,因为它接受选项作为JavaScript对象。如果您指定错误处理程序函数作为options对象的属性,则不会产生任何问题。

解决方案:
只需使用承诺方法:

var xhr = $.post(...);
xhr.done(function(data, status, xhr){ 
  //Handle when success
}).fail(function(xhr, errorType, error){
  //Handle when an error occurred.
}).always(function(){ 
  //A handler executed always, on success or error
  //Use this to hide the loading image for example
})

调用时,ajax调用函数将返回一个promise对象。附上您的成功(使用done()方法)和错误(using fail()方法)处理程序的承诺 在任何情况下都会执行always()(在执行done()fail()处理程序之后)。完成与请求相关的任何工作非常有用,例如隐藏加载图像。

答案 3 :(得分:0)

对@ Pinal答案的扩展,我相信var personEntitySet = pobjBuilder.EntitySet<Person>("Person"); personEntitySet.EntityType.HasKey<int>(x => x.Key1); personEntitySet.EntityType.HasKey<int>(x => x.Key2); 函数正在创建问题:

原始代码

获取

parseArguments

解析参数

$.get = function(/* url, data, success, dataType */){
  return $.ajax(parseArguments.apply(null, arguments))
}

可能的解决方案

function parseArguments(url, data, success, dataType) {
  if ($.isFunction(data)) dataType = success, success = data, data = undefined
  if (!$.isFunction(success)) dataType = success, success = undefined
  return {
    url: url,
    data: data,
    success: success,
    dataType: dataType
  }
}

但是,是的,这可能是一个通用功能,改变它可能会产生很大的影响。