我在我的应用程序中使用Zepto
作为jQuery
的替代,当我意识到$.ajax
有错误处理程序时,我正在处理任务,但其他方法如{ {1}},$.post
没有它。
这可能是什么原因?
$ .post(url,[data],function(data,status,xhr){...},[dataType])
$。get(url,[data],[function(data,status,xhr){...}],[dataType])
答案 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
}
}
但是,是的,这可能是一个通用功能,改变它可能会产生很大的影响。