Если вы сотрудничаете с поставщиком, вы можете отправить другой параметр строки запроса, являющийся функцией обратного вызова при возникновении ошибки.
? callback =? & amp; ошибка =?
Это называется JSONPE, но это вовсе не стандарт defacto.
Затем провайдер передает информацию в функцию ошибки, чтобы помочь вам диагностировать.
Не помогает с ошибками в сообщении, хотя - jQuery нужно будет обновить, чтобы также вызвать функцию ошибки при тайм-ауте, как в ответе Адама Беллэра.
IIRC, арифметическая операция между подписанным и беззнаковым int будет давать неподписанный результат.
Таким образом, 20 - 80u
выдает результат без знака, эквивалентный -60
: если unsigned int
является 32-битным типом, этот результат равен 4294967236.
Кстати, присвоение i1
приводит к определенному реализацией результату , потому что число слишком велико, чтобы уместиться. Получение -60
типично, но не гарантировано.
Бинарные арифметические операторы будут выполнять обычные арифметические преобразования для своих операндов, чтобы привести их к общему типу.
В случае i1
, i3
и i5
общим типом будет unsigned int , и поэтому результатом также будет unsigned int . Числа без знака будут переноситься по арифметике по модулю, поэтому вычитание немного большего значения без знака приведет к числу, близкому к целому числу без знака, которое не может быть представлено целым числом.
Таким образом, в случае i1
мы получаем преобразование, определяемое реализацией, поскольку значение не может быть представлено. В случае i3
деление на 2
возвращает значение без знака обратно в диапазон int, и в результате мы получим большое значение int со знаком после преобразования.
Соответствующие разделы из проекта стандарта C ++ следующие. Раздел 5.7
[expr.add] :
Аддитивные операторы + и - группируют слева направо. Обычные арифметические преобразования выполняются для операндов арифметического или перечислимого типа.
Обычные арифметические преобразования описаны в разделе 5
, где говорится:
Многие бинарные операторы, которые ожидают операнды арифметического или перечислимого типа, вызывают преобразования и приводят к типам результата в аналогичном путь. Цель состоит в том, чтобы получить общий тип, который также является типом результата. Этот шаблон называется обычными арифметическими преобразованиями, которые определяются следующим образом:
[...]
- В противном случае, если операнд с целочисленным типом без знака имеет ранг больше или равный рангу типа другого операнда, операнд с целочисленным типом со знаком должен быть преобразован в тип операнда с целочисленным типом без знака.
и для преобразования из значения, которое не может быть представлено для подписанного типа, раздел 4.7
[conv.integral] :
Если тип назначения подписан, значение не изменяется, если оно может быть представлено в типе назначения (и ширине битового поля); в противном случае значение определяется реализацией.
и для целых чисел без знака подчиняется модулю арифметического раздела 3.9.1
[basic.fundamental] :
Целые числа без знака должны подчиняться законам арифметики по модулю 2n, где n это число битов в представлении значения этого конкретного размера целого числа.48