4

我希望转换 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。
我正在尝试的是否可能,如果可以,有人可以帮助我指出正确的方向吗?

4

1 回答 1

3

success返回原始Deferred对象,而不是新对象。如果要转换数据,则需要deferred.pipe

function shapeResults( rawData ) {
    return rawData.toUpperCase();
}

function useTransformedData(data) {
    alert(data);
}

$.get( '/' )
    .pipe( shapeResults )
    .then( useTransformedData );

请参阅 jsFiddle。有一些更改可以使其在 jsFiddle 上运行,但效果是一样的。

于 2011-06-04T15:36:03.473 回答