原型到jQuery转换的AJAX语法

Prototype to jQuery conversion AJAX Syntax

本文关键字:AJAX 语法 转换 jQuery 原型      更新时间:2023-09-26

寻找一些建议是否我的语法是正确的这个原型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);
                                    }
                            });
                    }

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

dataType: 'json'

jQuery将自动解析这个,以一种比普通eval更安全的方式。事实上,我很确定,在大多数情况下,如果您不使用这个选项,jQuery将嗅探您的响应体,并智能地猜测是否将其解析为JSON、XML、HTML、脚本或文本,在这种情况下,您的eval将是不必要的。