为什么用AJAX在视图中加载内联JavaScript?

Dr.*_*ein 11 javascript xml ajax platform-agnostic

我们有一个标签式界面,其中一个标签内是隐私表格.此隐私表单以及使用外部JavaScript文件进行大量工作,也使用内联JavaScript,因为它当前依赖于动态代码(在服务器端语言中).

formTabs包装器(没有回调函数的ajax选项卡)

...
<script type ="text/javascript">
    var messagingTabset = ProjectName.Tabset.init({
        'tabID': 'preferences-tabset',
        'ajaxUrl0': '<%=Url.Action("PreferencesMainForm", "Profile")%>',
        'ajaxUrl1': '<%=Url.Action("ProfileImageForm", "Profile")%>',
        'ajaxUrl2': '<%=Url.Action("InterestsForm", "Profile")%>',
        'ajaxUrl3': '<%=Url.Action("PrivacyForm", "Profile")%>',
        'ajaxUrl4': '<%=Url.Action("PasswordForm", "Profile")%>',
        'ajaxUrl5': '<%=Url.Action("CustomUrlForm", "Profile", new {userId = Model.UserId})%>',
        'defaultAjaxUrl': '<%=Url.Action(Model.PartialName, "Profile")%>'
    });
</script>
...
Run Code Online (Sandbox Code Playgroud)

privacyForm视图(更多内联javascript与服务器端代码)

...
<script type = "text/javascript">
    var preferencesPrivacyForm = new ProjectName.AJAX.Form({
        "ajaxFormID": "preferences-privacy-form",
        "actionUrl": '<%= Url.Action("SavePrivacy","Profile") %>',
        "dataReturnType":"json"
    });
</script>
...
Run Code Online (Sandbox Code Playgroud)

后端开发人员:"此表单的配置JavaScript代码应保留在privacyForm视图中"

前端开发人员:"嗯,我确定我已经读过这不是这样做的方法 - 不可靠,所有JavaScript都应该在包含选项卡包装器的HTML页面内,在该选项卡加载的回调函数内.你应该真的a)为我提供逻辑 - 在tabs-wrapper中获取动态数据或b)让我通过DOM遍历获取这些动态变量"

后端开发人员:"这两种方法都有很多工作没有真正的回报!第一个例子很糟糕,因为这意味着我将不得不改变它的构建方式(并且工作正常).这可能会第二个例子是狡猾的,因为标记可能会改变,因此有人在编写代码时可能会忘记在tabs-wrapper中编辑DOM遍历方法.这是我们不需要的另一个抽象层次.如果你提供给我有一些证据证明为什么这真的非常糟糕,我会检查出来,但除此之外,我无法证明把时间放在"

前端开发人员:'好吧,我已经浪费了几天,通过将它们放入封装器的回调来解决AJAX加载的JavaScript的问题,但是现在你想到它,对这类事情的一个很好的参考将是真的很好,因为你是对的,目前,应用程序运行没有任何问题.

这是我们使用Ajax加载内联JavaScript的大型应用程序中的众多示例之一.

我应该说服后端开发人员我们应该使用回调,还是我错过了什么?

Mei*_*ude 5

我建议阅读Dale Carnegie的"如何赢得朋友和影响人".

开发人员似乎经常陷入这种情况,他们知道什么是最好的事情,但是他们没有从其他开发人员或管理层那里购买.

这本书绝对值得一读; 绝对必须阅读这个职业.


Aar*_*run 5

只要它有用的目的(例如,它加载来自其他网站的内容,如WordPress仪表板),它并不是真正的"坏",但是对服务器进行所有额外调用是浪费资源,除非你绝对必须做到这一点.

通常,最简单的答案是最正确的答案.在这种情况下,它意味着不添加所有额外开销以避免稍微重新编码后端.