阿贾克斯:这是不好的做法吗?


AJAX: Is this bad practice?

我已经使用Ajax一个多月了,我一直在转换我的很多文档来使用JQuery/Ajax。我发现很多代码都是多余的,所以我一直在从一个文档复制/粘贴到另一个文档。不过今晚,在复制/粘贴了一些Ajax代码后,我忘了将url更改为反映我粘贴到的文档。但是当我运行它时,代码工作了,使用 ajax's data 从另一个文档调用PHP。虽然这效果很好,并且肯定会减少文件大小和大量复制/粘贴,但我需要知道这是否是不好的做法?

例如,我的工作文档是wsparticipation.php

function loadgroups() {
    $.ajax({
        url: 'wsparticipation.php',
        type: 'POST',
        async: false,
        data: { 'setgroups': 1 },
        success: function(re) {
            $('#groupid').html(re);
        }
    });
}

它下面的一个函数,我从 wsmonthlyreport.php 粘贴的函数,使用 url : wsmonthlyreport.php .而且我没有将getmonthgetyear"程序"复制到wsparticipation.php,但它就像我这样做一样工作。

function loadmonthyear(){
    $.ajax({
        url: 'wsmonthlyreport.php',
        type: 'POST',
        async: false,
        data: { 'getmonth': 1 },
        success:function(re) {
            $('#showmonth').val(re);
            $.ajax({
                url: 'wsmonthlyreport.php',
                type: 'POST',
                async: false,
                data: { 'getyear': 1 },
                success: function(re){
                    $('#showyear').val(re);
                }
            });
        }
    });
}

那么,从另一个url而不是当前url调用程序是好的做法还是坏做法?

@Landslyde,我只是检查您的代码并检查所有注释。 你正在以一种很好的方式编写 Ajax。 如果需要,您也可以使用错误和发送块之前。

如果需要,我们应该在某些特殊情况下使用 async: false。将 async 设置为 false 意味着要调用的语句必须先完成,然后才能调用函数中的下一条语句。如果设置 async: true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一条语句。

由于我可以签入调用的函数 loadmonthyear(),因此无需设置 asyc:false,因为这只会在第一个请求成功后调用。

我不能这么说:

async : false

编码的约定很糟糕,如果它真的很糟糕,那么为什么jQuery开发那个。使用 async:false 不允许浏览器在 ajax 完成之前运行代码,这些代码写在 ajax 代码的正下方;浏览器停止执行以完成我们称之为同步调用的 AJAX 调用。

假设,我们需要初始化 JQuery UI 组件并且数据必须从 ajax 加载,UI 组件可以在没有数据的情况下初始化,以确保这样的 async:false 只是保证的方式,否则对于一般用途你应该使用 async:true;