原型到jQuery转换AJAX语法

时间:2011-10-26 04:01:06

标签: javascript jquery ajax prototypejs

寻找关于我的语法对于这个Prototype到jQuery转换是否正确的一些建议。

我同时加载两个框架,并希望将所有脚本转换为jQuery,以减少页面加载的重量和速度。

原型

希望在jQuery中复制它:

    if (snapshots.items.length < snapshots.total_entries) {
            new Ajax.Request(snapshots.url, {
                method: 'GET',
                parameters: {
                    page: snapshots.current_page + 1,
                    per_page: snapshots.per_page
                },
                onSuccess: function(response) {
                    var start = snapshots.items.length;
                    snapshots.items = snapshots.items.concat(eval(response.responseText));
                    for (i = start; i < snapshots.items.length; i++) {
                        $('snapshots').appendChild(render_snapshot(snapshots.items[i].snapshot));
                        Photo.Carousels.instances[Photo.Filmstrip.carouselIndex].slides.push($('slide_' + snapshots.items[i].snapshot.id));
                        Photo.Carousels.instances[Photo.Filmstrip.carouselIndex].slides[i]._index = i;
                    }
                    snapshots.current_page++;
                    Photo.Filmstrip.currentSnapshot(currentSnapshot);
                }
            });
        }

到jQuery

   if (snapshots.items.length < snapshots.total_entries) {
                            $j.ajax({
                                    url: snapshots.url,
                                    data: {
                                            page: snapshots.current_page + 1,
                                            per_page: snapshots.per_page
                                    },
                                    success: function (response) {
                                            var start = snapshots.items.length;
                                            snapshots.items = snapshots.items.concat(eval(response.responseText));
                                            for (i = start; i < snapshots.items.length; i++) {
                                                    $j('.snapshots').append(render_snapshot(snapshots.items[i].snapshot));
                                                    Photo.Carousels.instances[Photo.Filmstrip.carouselIndex].slides.push($j('slide_' + snapshots.items[i].snapshot.id));
                                                    Photo.Carousels.instances[Photo.Filmstrip.carouselIndex].slides[i]._index = i;
                                            }
                                            snapshots.current_page++;
                                            Photo.Filmstrip.currentSnapshot(currentSnapshot);
                                    }
                            });
                    }

1 个答案:

答案 0 :(得分:0)

是的,这看起来是正确的 - 我知道jQuery比Prototype好得多,所以我猜一点,但它有意义(假设你已经使用$.noConflictjQuery分配给{{ 1}})。正如@Greg在他的评论中指出的那样,唯一的问题是$j - 我假设您正在返回JSON数据,因此如果您包含配置选项:

eval

jQuery将以比普通dataType: 'json' 更安全的方式自动解析它。事实上,我很确定在大多数情况下,如果你不让这个选项出来,jQuery会嗅探你的响应体并智能地猜测是否要将它解析为JSON,XML,HTML,脚本或文本,在这种情况下你的{{{ 1}}是不必要的。