Невозможно установить параметры заголовка ajax [duplicate]

По вопросу «что мне делать с этим» может быть много ответов.

Более «формальный» способ предотвращения таких ошибок при разработке применяя дизайн по контракту в вашем коде. Это означает, что при разработке вы должны установить инварианты класса и / или даже предпосылки для функции и .

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

Таким образом, вы можете избежать случаев NullReferenceException, которые являются результатом нарушения установленных ограничений. Например, если вы используете свойство объекта X в классе, а затем попытаетесь вызвать один из его методов, а X имеет нулевое значение, то это приведет к NullReferenceException:

public X { get; set; }

public void InvokeX()
{
    X.DoSomething(); // if X value is null, you will get a NullReferenceException
}

Но если вы установите «свойство X никогда не должно иметь нулевого значения» в качестве предпосылки для метода, вы можете предотвратить описанный ранее сценарий:

//Using code contracts:
[ContractInvariantMethod]
protected void ObjectInvariant () 
{
    Contract.Invariant ( X != null );
    //...
}

По этой причине Код Контракт существует для приложений .NET.

В качестве альтернативы дизайн по контракту может быть применен с использованием утверждений .

ОБНОВЛЕНИЕ: Стоит отметить, что этот термин был придуман Бертраном Майером в связи с его дизайном языка программирования Эйфеля .

24
задан hippietrail 22 December 2011 в 11:13
поделиться

2 ответа

JSON с помощью Padding добавляет элемент сценария к странице с атрибутом src , указывающим на URL-адрес веб-службы. Затем веб-служба возвращает сценарий, содержащий данные, завернутые в функцию обратного вызова, которая выполняется, когда скрипт заканчивает разбор. Это не так много JSON (для начала он даже не должен быть действительным JSON), так как это обычный JavaScript.

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

  • XMLHttpRequest Level 2 - Chrome, Safari 4+, Firefox 3.5+, Opera
    // Is XMLHttpRequest Level 2 supported?
    if ("withCredentials" in new XMLHttpRequest()) 
  • XDomainRequest - для IE 8, IE 9
    // Is XDomainRequest supported?
    if ("XDomainRequest" in window)

Было бы неплохо проверить эти реализации, если они существуют, и использовать их соответственно, возвращаясь к стандартному JSONP для неподдерживаемых или более старых браузеров.

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

54
ответ дан Andy E 25 August 2018 в 15:02
поделиться

Попробуйте следующее:

// OAuth configurations   
    var config = {
      'client_id': 'xxxxxx.apps.googleusercontent.com',
      'scope': 'https://www.google.com/m8/feeds/contacts/default/full'          
    };

gapi.auth.authorize(config, function(data) {
      // login complete - now get token
      var token = gapi.auth.getToken();
      token.alt = 'json';
      // retrieve contacts
      jQuery.ajax({
        url: 'https://www.google.com/m8/feeds/contacts/default/full/?max-results=999999',
        dataType: 'jsonp',
        data: token,
        success: function(data) { successGmail(data); }
      });
    });

Я нашел его там: https://groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/ hZpo041UaH4J

0
ответ дан Azr 25 August 2018 в 15:02
поделиться
Другие вопросы по тегам:

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