首次创建JavaScript API

首次创建JavaScript API,javascript,jquery,api,Javascript,Jquery,Api,我第一次为响应性网页/web应用程序(移动设备)创建了一个商业API 我是新来的,不幸的是,我一个人工作,对Javascript(一个复杂的故事)也不熟悉 我只是想知道,是否有业内人士可以就以下形式的“获取”电话提供他们的专业意见: 函数调用: var printList = function(lid,options,get) { var list = $("ul#"+lid); var promise = get(options); promise.promise()

我第一次为响应性网页/web应用程序(移动设备)创建了一个商业API

我是新来的,不幸的是,我一个人工作,对Javascript(一个复杂的故事)也不熟悉

我只是想知道,是否有业内人士可以就以下形式的“获取”电话提供他们的专业意见:

函数调用:

var printList = function(lid,options,get) {
    var list = $("ul#"+lid);
    var promise = get(options);

    promise.promise().then(
        function(response) {
            var items = response;
            list.empty();

            $.each(items, function(item,details) {
                var ul = $('<ul/>');
                ul.attr('id', lid+'_'+details.ID);
                var li = $('<li/>')
                .text(details.ID)
                .appendTo(list);
                ul.appendTo(list);

                $.each(details,function(key,value) {
                    var li = $('<li/>')
                    .text(key+': '+value)
                    .appendTo(ul);
                });
            });
        }
    );
}
var printList=函数(lid、options、get){
var列表=$(“ul#“+lid);
var promise=get(期权);
那就答应吧(
功能(响应){
var项目=响应;
list.empty();
$。每个(项目、功能(项目、详细信息){
var ul=$(“
    ”); ul.attr('id',lid+''.'详细信息.id); 变量li=$(“
  • ”) .text(details.ID) .附件(清单); ul.附录(列表); $。每个(详细信息、功能(键、值){ 变量li=$(“
  • ”) .text(键+':'+值) .附录(ul); }); }); } ); }

我们将非常感谢您的任何意见或指导。

我本身不是该行业的专业人士,但我认为有几件事可以改进您的代码:

var printList = function(lid, options, get) {
    var promise = get(options);
    var list = $("#" + lid);

    promise.success(function(response) {
        var data = response;
        list.empty();
        $.each(data, function(item, details) {
            var ul = $('<ul/>').attr('id', lid + '_' + details.ID);
            var li = $('<li/>').text(details.ID).appendTo(list);
            ul.appendTo(list);
            $.each(details, function(key, value) {
                var li = $('<li/>').text(key + ': ' + value).appendTo(ul);
            });
        });
    });
}
  • 根据通用惯例设置格式。如果没有适当的缩进,很难看到代码在做什么
  • 只需使用
    $(“#”+lid)
    而不是
    $(“ul”+lid)
    。开头的
    ul
    没有添加任何歧义消除,因为
    id
    属性必须是唯一的,这只会延长解析时间
  • 在这种情况下,请删除本地存储。并非所有浏览器都支持它,据我所知,这里不需要它。直接使用响应返回的数据即可
以下是我将如何更改您的代码:

var printList = function(lid, options, get) {
    var promise = get(options);
    var list = $("#" + lid);

    promise.success(function(response) {
        var data = response;
        list.empty();
        $.each(data, function(item, details) {
            var ul = $('<ul/>').attr('id', lid + '_' + details.ID);
            var li = $('<li/>').text(details.ID).appendTo(list);
            ul.appendTo(list);
            $.each(details, function(key, value) {
                var li = $('<li/>').text(key + ': ' + value).appendTo(ul);
            });
        });
    });
}
var printList=函数(lid、options、get){
var promise=get(期权);
变量列表=$(“#”+lid);
承诺、成功(功能(响应){
var数据=响应;
list.empty();
$。每个(数据、功能(项目、详细信息){
var ul=$('
    ').attr('id',lid+'.+details.id); var li=$(“
  • ”).text(details.ID).appendTo(list); ul.附录(列表); $。每个(详细信息、功能(键、值){ var li=$(“
  • ”).text(key+”:“+value).appendTo(ul); }); }); }); }

编辑:编辑后的代码对我来说很好,除了次要的
ul
之外。

还有一些建议可以让你的API看起来更专业一些:

1-名称空间

使用名称空间将代码整齐地打包在自己的空间中,这样就不会与页面上的其他函数定义冲突。从以下内容开始:

window.MyNamespace =  {};
MyNamespace.get = function(qid, pid) {
   //things
};
MyNamespace.anotherFunction = function() {
   //other stuff
}
如果您的代码开始变大,您可以将整个代码封装在一个闭包中。您还可以将其全部定义为类,然后实例化一次,以使代码更整洁,并允许您存储实例变量并调用this.anotherFunction()。如果你愿意,我也可以提供这些例子

2-API方法签名

我更喜欢看到的另一件事是函数的显式参数,而不是函数get(params)样式的代码。使参数显式可以使代码更易于阅读和理解,并阻止特别的黑客行为,这在编写API时尤为重要。这是一个仅仅因为你能,并不意味着你应该

3-配置

尝试将ID和URL之类的内容移动到变量中,以使代码更易于重用和使用


一般来说,Javascript开发人员在查看API文档之前会先查看代码,因此您可以采取任何措施使API函数名和参数名更具表现力和自我记录,这将有助于他们。

这种问题可能更适合于感谢,我肯定会检查它除了codereview可能是合适的之外,您的代码确实有问题。getSample使用异步Ajax调用,因此无法从函数返回值。您需要引入回调函数作为参数或返回承诺对象。代码更新为包含“承诺”谢谢。我将进行建议的更改。.promise().then()和.success()功能之间有什么真正的区别吗?或者两者中的任何一个会起作用?这是有区别的,但在这种情况下,我认为它们在功能上是相同的。1-在编辑OP之前,我实际上有名称空间。然而,目前我不赞成使用它们,因为我制定了一个坚实的结构,以允许歧义。2-如上所述,这些特定的get方法被模糊地调用。我曾经认为,在诸如printList()3这样的UI调用中,硬输入参数会使委托难以使用-您将在$.ajaxURL属性中看到一个“URL”变量,这是一个超出范围的配置变量集。我将仔细考虑硬类型参数的想法,并尝试找到一种优雅的方法来重新引入名称空间:)