Лучшие практики для возврата и отображения данных из вызовов Ajax

Если в классе не определены конструкторы, компилятор предоставляет конструктор по умолчанию / без параметров, который используется для создания экземпляров соответствующих объектов, как показано ниже.

class MaliciousSmall
{
    //if no constructors are defined then compiler adds the following
    //public MaliciousSmall()
}

class Malicious: MaliciousSmall
{
    //if no constructors are defined then compiler adds the following
    //public Malicious() : base()
}

Malicious obj = new Malicious();

Поскольку вы определили конструктор в базовом классе, компилятор предполагает, что вам не требуется конструктор по умолчанию / без параметров. Когда конструктор по умолчанию из MaliciousSmall пытается вызвать конструктор по умолчанию своего базового класса, разрывается цепочка конструктора.

class MaliciousSmall
{
    public MaliciousSmall(DataRow row)
    {
        //compiler will not supply a default constructor
    }
}

class Malicious: MaliciousSmall
{
    //if no constructors are defined then compiler adds the following
    //public Malicious() : base()
}

Malicious obj = new Malicious();

Для создания экземпляра объекта требуется вызвать конструктор по умолчанию класса Malicious, который, в свою очередь, пытается вызвать конструктор по умолчанию базового класса, но, поскольку этого не существует, разрывается цепочка конструктора .

Рекомендуется использовать необходимые конструкторы так, чтобы это не приводило к разрыву цепочки.

class MaliciousSmall
{
    public MaliciousSmall()
    {
        //
    }

    public MaliciousSmall(DataRow row)
    {
        //
    }
}

class Malicious:MaliciousSmall
{
    public Malicious()
    {
        //
    }

    public Malicious(DataRow row):base(row)
    {
        //
    }
}

Malicious obj = new Malicious();

Конструкторы очень важны, так как, я не думаю, что ваша программа никуда не денется без создания объекта, пожалуйста, обязательно посетите MSDN и постарайтесь прочитать о this ключевое слово.

5
задан Nathan Hess 20 May 2009 в 20:20
поделиться

7 ответов

Я думаю, это зависит от вашего приложения.

Чистый HTML - самый простой, вы просто заходите на место и альт. JQuery позволяет легко добавлять нужные события, а что нет.

Однако всякий раз, когда я использовал AJAX, он всегда превращался в возврат JSON и построение элементов на лету. Если вы, например, заселяете дерево, правильное размещение может быть затруднено. Это вынуждает вас в любом случае выполнять код на стороне клиента, и в этот момент простое использование JSON с самого начала будет более чистым.

Кроме того, если вы планируете использовать вызовы данных с других страниц, тогда использование JSON - это лучший вариант, потому что HTML будет исправлено.

7
ответ дан 18 December 2019 в 14:51
поделиться

Это появилось недавно и, возможно, это обман: Ответ AJAX: данные (JSON, XML) или фрагмент HTML? .

Если вы собираетесь создавать HTML, тогда вы также можете вернуть HTML напрямую и вставить его в DOM. Однако бывают случаи, когда вам нужно работать с объектами, и здесь пригодится JSON.

Если вы вернете объект Person, например, вы можете поприветствовать Person.Name и показать Person.Preferences, что действительно удобно. Это зависит от вашего дизайна, но общие соображения должны заключаться в том, чтобы держать HTML подальше от Javascript, если вы не создаете RIA.

0
ответ дан 18 December 2019 в 14:51
поделиться

Часть вашего вопроса "возможные действия сверх этого" имеет большое значение. Если вам нужно делать другие вещи с данными, кроме их отображения, возврат в виде JSON - явно лучший вариант, потому что вы можете работать с данными как с собственным объектом JavaScript, вместо того, чтобы проходить через HTML DOM. Если все, что вы когда-либо собирались сделать, это отобразить его, я не вижу смысла тратить время на создание этого отображения на JavaScript; просто создайте HTML-код на уровне представления на сервере.

2
ответ дан 18 December 2019 в 14:51
поделиться

Я использовал все три и пришел к выводу, что возвращать HTML лучше при добавлении новых элементов на страницу.

По моему опыту, при создании HTML с помощью javascript я обычно копирую работа, которая уже была проделана для пользовательского пути, отличного от javascript.

Я по-прежнему предпочитаю синтаксический анализ json для обновления существующих элементов или создания функциональности только javascript. Я говорю себе это для пропускной способности, но я думаю, что это просто потому, что я люблю javascript.

В качестве четвертого варианта я прочитал отличный пост о том, как Flickr обрабатывает огромные объемы данных с помощью конкатенации строк. По сути, просто проанализируйте большую нить на трубе и нарежьте ее на клиенте. Это значительно снижает нагрузку на сервер с незначительным увеличением нагрузки на клиенте.

0
ответ дан 18 December 2019 в 14:51
поделиться

Это полностью зависит от того, как все настроено в вашем приложении. Я, например, предпочитаю возвращать JSON (второй подход в вашем списке), потому что у меня есть параметр `` код ошибки '', который я проверяю в функции onSuccess перед обновлением содержимого на странице, и если он не равен нулю, я уведомляю пользователя ошибки, включая сообщение об ошибке, полученное с сервера (проверка на стороне сервера, тайм-аут базы данных и т. д.).

4
ответ дан 18 December 2019 в 14:51
поделиться

Лучшее решение - возврат в чистом виде HTML. По большей части gzip должен нейтрализовать любую разницу в пропускной способности, а рендеринг через javascript на клиенте может быть медленным, если клиент - дрянная машина. Наконец, написать javascript для рендеринга HTML сложно по сравнению с использованием чего-то приятного, например представления, если вы используете MVC.

-1
ответ дан 18 December 2019 в 14:51
поделиться

Думаю, вам не хватает совершенно правильного варианта, который я часто использую. Это моя типичная схема, и она еще не подвела меня ...: -)

Вот базовый шаблон jQuery, который я использую:

$(function() {
    $.getJSON('/some/page',{foo:bar,bar:foo},function(json) {
        if(json.outcome == 'success') {
            $('body').prepend(json.html);
        } else {
            // Somehow let the user know why it didn't work
            alert(json.error);
        }
    });
});

Вот базовая структура бэкенда (PHP в моем случае), которую я использую:

<?php // Page: '/some/page'

/* Blah Blah Blah... do whatever needs to be done... */

// If everything turns out okay (assuming '$output' is the HTML 
// you want to display...
echo json_encode(array('outcome'=>'success','html'=>$output));

// If something goes wrong... just do:
echo json_encode(array('outcome'=>'error','error'=>'Uh oh... something is broken'));

Естественно , вы захотите уточнить свою ошибку, поместив их в какую-то переменную или что-то в этом роде. Но вы должны уловить идею. Кроме того, конечно, вы можете добавить дополнительную информацию в вывод json. У вас может быть готовый HTML-код, а также некоторая другая информация, такая как «уведомление об успехе» или новое имя класса для какого-то элемента, я не знаю ... как бы то ни было ... возможности безграничны.

В любом случае, причина, по которой я выберите этот маршрут, потому что он s обычно быстрее (исходя из моего опыта), чтобы добавить предварительно созданный HTML в DOM, а не зацикливаться на JSON и вставлять материал, если это просто, например, небольшой текст для замены в элемент. Но метод, который я показал, является, ИМО, лучшим из обоих миров. Вы можете прикрепить HTML в виде строки к одному из свойств JSON.

Happy jQuerying: -)

1
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: