JQuery отправка JSON

194

Обновление: я хотел бы передать var valueна сервер

привет, такой же старый, такой же старый ... :)

У меня есть форма называется <form id="testForm" action="javascript:test()">и область кода называется<code id="testArea"></code>

Я использую этот код для строкового отображения и отображения данных в области кода:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Я хочу отправить эти данные в файл JSON. Я работал над этим проектом: http://ridegrab.com/profile_old/ и если вы Submit Queryнажмете кнопку, вы увидите, что заголовок страницы заполнится.

Также я хочу использовать этот фрагмент скрипта для отправки данных:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Опять же, все, что я хочу, - это возможность отправлять эти данные JSON на сервер. Мой сервер настроен update or POSTна данные в нужном месте.

Patrioticcow
источник
я не могу заставить это работать :) я не знаю, как собрать их вместе, чтобы отправить эти данные на сервер ... даже если я заменю dataна data: value,... !! ??
Patrioticcow
Во-первых, вы уверены, что это не проблема подключения? Если вы назначаете errorфункцию, она вызывается? Если да, то с какой ошибкой?
Wiseguy
1
Хотя ему больше года, я отвечу на последний вопрос @ Patrioticcow о том, как это сделать. Вы видите опцию «success», которую вы отправили в метод ajax? Сделайте то же самое с «ошибкой». Как в «error: MyErrorHandlingFunction» или «error: function (error) {[Код обработки ошибки здесь]}»
vbullinger

Ответы:

220

'data' должен быть строковым объектом JavaScript:

data: JSON.stringify({ "userName": userName, "password" : password })

Чтобы отправить свой formData, передайте его по адресу stringify:

data: JSON.stringify(formData)

Некоторые серверы также требуют application/jsonтип контента:

contentType: 'application/json'

Здесь также есть более подробный ответ на аналогичный вопрос: Jquery Ajax Публикация json на веб-сервисе

Кайл Уайлд
источник
@tasos Я думаю, это то, что вы ищете: stackoverflow.com/questions/5806971/…
Кайл Уайлд,
Повторяя здесь неправильность; это будет работать нормально для простых сценариев, но сообщение в кодировке URL может быть очень проблематичным, особенно для массивов вещей.
FMM
@FMM и Jonas N - Можете ли вы, ребята, помочь мне выяснить, как обновить мой ответ для правильности? Примеры в документации jQuery (здесь: api.jquery.com/jQuery.post ) создают впечатление, что вы можете публиковать либо объект JS, либо строку, что заставило меня поверить, что jQuery будет обрабатывать всю необходимую сериализацию строк ,
Кайл Уайлд,
Патриотик сказал: «Что делать, если я хочу отправить JSON из значения VAR» Если значение не является массивом или объектом, это недопустимый JSON.
andsens
1
Рассмотрим , что происходит , когда данные содержат, например, список вещей: { foo: [1,2,3], bar: 'baz' }. Это будет закодировано как foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(unescaped, это foo[]=1&foo[]=2&foo[]=3&bar=baz). Скорее всего, не то, что вы хотите на стороне сервера.
FMM
271

Вы публикуете JSON, как это

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

если вы передаете объект как settings.data, jQuery преобразует его в параметры запроса и по умолчанию отправляет с типом данных application / x-www-form-urlencoded; charset = UTF-8, вероятно, не то, что вы хотите

teknopaul
источник
@ TimLovell-Smith не будет иметь значения, поскольку jQuery ни dataв коем случае не будет обрабатывать строку
Фил
2

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

https://stackoverflow.com/a/1320708/969984

Ваш сервер не принимает кросс-сайт почтовый запрос. Поэтому необходимо изменить конфигурацию сервера, чтобы разрешить межсайтовые запросы.

nizam.sp
источник