我想将$.ajax().done()
包装在一个单独的类中,其中包括针对架构验证JSON响应。
示例调用可能如下所示:
myService.get("/api/people").done(function(people) {
// at this point I'm certain the data in people is valid
template.render(people);
}).catch(function() {
// this happens if validation of people failed, even if the request itself was successfull
console.log("empty json or validation failed");
});
成功回调函数在done()
中传递,但只应在私有函数(_validate(data, schema))
返回true)时执行。不太优雅的版本可能如下所示:
myService.get("api/people", successCallback, errorCallback);
我想直接公开$.ajax()
的内部延迟方法。这可能吗?
答案 0 :(得分:5)
您不需要更改Promises
。您可以使用then
图层承诺。
function _validate(data, schema) {
return false;
}
var myService = {
get: function (data) {
return $.ajax(data).then(function (reply) {
if (_validate(reply, schema)) {
return reply;
} else {
// works if your library is Promises/A+ compliant (jQuery is not)
throw new Error("data is not valid JSON"); // causes the promise to fail
/*// else do:
var d = new $.Deferred();
d.reject("data is not valid JSON");
return d.promise();*/
}
});
}
}
myService.get("foo").done(function () { /* success */ }).fail(function () { /*failed */ });