我希望转换ajax调用返回的数据并将其传递给另一个插件的构造函数。我认为如果插件的选项接受了其数据的对象或返回数据的函数,这将允许我使用延迟对象为jQuery.ajax。
问题是,我需要在客户端转换数据,但无法看到如何使用jQuery.Deferred Object执行此操作。有许多不同复杂性的例子,但涉及传递和转换参数的次数并不多。
这是代表我想要实现的一些代码。
function shapeResults( rawData ) {
return $.Deferred(function ( dfd ) {
//transform in someway
var shapedData = rawData.toUpperCase();
alert( shapedData );
//change the 'signature' from jqXHR to data
dfd.resolve( shapedData );
}
).promise();
}
function useTransformedData ( data ) {
//hoping for UPPERCASE data here but still getting rawData
alert( data );
}
$.get( '/' )
.success( shapeResults )
.then( useTransformedData );
现在,useTransformedData回调似乎总是接收rawData而不是transformedData 我正在尝试的是什么,如果是这样,有人可以帮我指出正确的方向吗?
答案 0 :(得分:3)
success
返回原始Deferred
对象,而不是新对象。如果要转换数据,则需要deferred.pipe
function shapeResults( rawData ) {
return rawData.toUpperCase();
}
function useTransformedData(data) {
alert(data);
}
$.get( '/' )
.pipe( shapeResults )
.then( useTransformedData );
See jsFiddle。有一些变化使它适用于jsFiddle,但效果是一样的。