Веб-сервис C# не произведет JSON, только XML

Здесь вы говорите о нескольких разных вещах: вы работаете с Javascript в вашем шаблоне Bootstrap, ваших переменных ColdFusion и вашей базе данных. Все 3 могут повлиять на конечную дату, которую вы видите, и то, что вы видите, - это не объект даты (как, в конечном счете, должна хотеть база данных), а строковое представление объекта даты.

Когда вы смотрите на дату, она, вероятно, выглядит как March 27, 2019 12:00:00 pm или 03/27/2019 12:00:00 pm или 27/03/2019 12:00:00.000 или что-то в этом роде. Когда база данных или язык программирования воспринимают эту строку как объект даты, она выглядит как 123465789.123465798, что обычно составляет конкретное значение в секундах с той эпохи, которую использует системный компонент. Epoch это совершенно другая тема.

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

Вы хотите иметь в виду, какую часть кода вы используете для маскировки. Обычно маскировка предназначена для отображения, но вам также может понадобиться преобразовать строку в объект с возможностью считывания даты в вашей базе данных, прежде чем он вставит ее. Итак, вы захотите убедиться, что ваш Javascript ничего не делает со значением в вашей форме, что ColdFusion ничего не делает с этой строкой Javascript, и что ваша база данных больше не изменяет эту строку ColdFusion.

Я не уверен, что Bootstrap datapicker использует для интерпретации строк даты или, если он в конечном итоге отправляет нечетную строку в ColdFusion, но я точно знаю, что CF11 использует различную маскировку в зависимости от используемой вами функции , DateFormat() не волнует, какой случай вы используете, но DateTimeFormat() делает. Он опирается на определение маскировки своей базовой Java SimpleDateFormat, которая интерпретирует y и Y как разные маски, означающие разные вещи.

Большая боль в том, что, как вы видели, он будет виден только через несколько дней в конце года, поскольку год никогда не состоит из ровно 52 недель. Таким образом, у нас есть другой тип даты, называемый WeekYear или Y в SimpleDateFormat маскировке. По сути, это тот год, в котором он основан на Неделе (W или w). Таким образом, в течение нескольких дней в начале и конце года календарный год не будет равняться году недели. В остальные 358 дней года они будут такими же. А поскольку Новый год и канун Нового года часто являются нерабочими праздниками, ОЧЕНЬ ПРОСТО упускать из виду. Так что, по сути, ваш код не работал правильно последние пару лет; у тебя просто не было причин замечать Забавно, правда?

Для простого примера, см .: https://trycf.com/gist/5cb651559e28e5cbdecdb57b959c3c18/acf11?theme=monokai

И если вы заметили и dateFormat(), и timeFormat() будут маскироваться за пределы того, что они «технически» должны делать. Вы можете получить timeFormat(), чтобы применить маску к части date строки. Они не должны работать таким образом.

Как я уже говорил во многих местах, обработка дат (почти на любом языке) - моя любимая мозоль. Это тема, которая заставит вас захотеть вырвать свои волосы. И, возможно, волосы любого, кто сидит рядом с вами. И ОПРЕДЕЛЕННО волосы того, кто написал код обработки даты, который вы отлаживаете. Это полностью вызывающая ярость Кодекс тема.

1141 В любом случае, если вы захотите взглянуть на некоторые другие примеры, я уже писал об этом пару раз и, вероятно, сделаю это снова. Спасибо, что втянул меня обратно в эту кроличью нору чистого безумия.

https://codefumonkey.blogspot.com/2016/02/date-masking-inconsistency.html https://codefumonkey.blogspot.com/2016/10/ more-date-masking.html

ПРИМЕЧАНИЕ: Более поздние версии CF изменили поведение маскирования в некоторых функциях даты. Они не чувствительны к регистру в CF2018, поэтому не имеет значения, используете ли вы yyyy или YYYY. Но сделайте себе одолжение и используйте yyyy, так как вы знаете, что CF все еще построен на Java. Однако есть некоторые другие фреймворки, которые ожидают YYYY вместо yyyy, поэтому все еще очень важно помнить, какой язык вы используете для применения маски. И если вам не нужно видеть значение даты и вы можете продолжать работать с объектом даты, оставьте его таким, а не делайте его читабельной строкой.

8
задан TheDude 19 March 2009 в 20:32
поделиться

4 ответа

Насколько я знаю, атрибут ScriptService просто позволяет сервису автоматически создавать прокси JavaScript (путем добавления/js к адресу конечной точки - ScheduleComputerDS.asmx/js в случае). Это не позволяет Вам называть операции на сервисе путем, Вы пытаетесь сделать.

Вы могли вместо этого использовать УСПОКОИТЕЛЬНЫЙ сервис WCF (который требует.NET 3.5), к которому можно получить доступ путем отправки URI надлежащей формы через HTTP, ДОБИРАЮТСЯ.

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

Я думаю, что существует опечатка:

dataType: "jsonp",

Должен быть:

dataType: "json",
6
ответ дан 5 December 2019 в 14:06
поделиться

Вы попробовали типом данных json?

Кроме того, взгляните на Encosia Используя jQuery к статье Consume ASP.NET JSON Web Services о вопросе. Существует некоторая хорошая информация о распространенных ошибках также.

1
ответ дан 5 December 2019 в 14:06
поделиться

У Rich Strahl есть действительно основное сообщение, которое должно выручить Вас с этим.

http://www.west-wind.com/weblog/posts/164419.aspx

3
ответ дан 5 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

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