Ajax JQuery всегда работает Ошибка

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

По крайней мере, я мог бы определить интерфейс, который им потребуется для реализации, тогда они предоставить раздел «код», который реализовал этот интерфейс.

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

У меня возникла эта проблема, когда пришло время добавить новый метод примерно через год после отправки старого интерфейса и после распределения большого количества «старых» данных, которые необходимо было поддерживать. Я закончил создание нового интерфейса, унаследованного от старого, но этот подход усложнил загрузку и создание экземпляров классов, предоставленных клиентом, потому что мне пришлось проверить, какой интерфейс доступен.

Одно из решений, о которых я думал в то время было вместо этого использовать фактический класс как базовый тип, такой как тот, который приведен ниже. Сам класс может быть помечен как абстрактный, но все методы должны быть пустыми виртуальными методами (а не абстрактными методами). Клиенты могут затем переопределять методы, которые они хотят, и я могу добавить новые методы в базовый класс, не делая недействительным существующий код, поставляемый клиентом.

public abstract class BaseClass
{
    public virtual void Foo1() { }
    public virtual bool Foo2() { return false; }
    ...
}

Независимо от того, применяется ли эта проблема, вы должны подумать о том, как модифицировать интерфейс между вашей базой кода и кодом, поставляемым клиентом.

23
задан David 21 April 2011 в 13:26
поделиться

3 ответа

Убедитесь, что вы возвращаете действительный JSON. Если это не так, и все идет правильно на сервере, $ .ajax приведет к ошибке, а не к успеху.

 function FindContact(CompanyName,DivisionName,FirstName,LastName) {

        $.ajax({
            url: 'Path',
            dataType: "html or json",
            async:false,
            type:'post',
            data: {'FirstName':FirstName,'LastName':LastName,'DivisionName':DivisionName,'CompanyName':CompanyName},
            success: DisplayContacts,
            error: ErrorMsg
        });
    }

Чтобы проверить, является ли json действительным, достаточно просто переключить dataType на html и увидеть, что успех срабатывает. Если это так, то ваш json недействителен, если вы все еще получаете ту же проблему, что-то еще не так.

Другой способ проверить, возвращается ли действительный json, - открыть firebug и, когда запрос будет отправлен, щелкнуть по вкладке ответа, скопировать ответ и попасть на jsonlint.com, чтобы проверить, действителен ли он.

Jquery ajax docs

50
ответ дан locrizak 21 April 2011 в 13:26
поделиться

Я столкнулся с той же проблемой при вызове ajax с использованием jquery ajax. Я исправил это, используя следующий код:

$.ajax({
  url: "/url",
  dataType: 'text',
  success: function(result){ alert(result); },
  error: ErrorMsg,
});

Примечание: dataType: параметр 'text' , он работал для меня.

2
ответ дан Adam Simpson 21 April 2011 в 13:26
поделиться

Моим решением была разница в заголовках Accept-Type и Content-Type. Если заголовок Accept-Type запроса на стороне клиента не совпадает с заголовком Content-Type ответа на стороне сервера, Jquery вызовет функцию обратного вызова с ошибкой.

Jquery по умолчанию устанавливает заголовок Accept-Type равным application/json. Однако мой сервер отправлял ответ с Content-Type application/x-javascript. Мое исправление состояло в том, чтобы изменить заголовок Content-Type ответа на стороне сервера на соответствующий application/json.

3
ответ дан charltoons 21 April 2011 в 13:26
поделиться
Другие вопросы по тегам:

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