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на дані в потрібному місці.


я не можу змусити його працювати :) Я не знаю, як з’єднати їх, щоб надіслати ці дані на сервер ... навіть якщо я замінюю dataна data: value,... !! ??
Patrioticcow

По-перше, ви впевнені, що це не проблема з'єднання? Якщо ви призначите errorфункцію, чи її викликають? Якщо так, то з якою помилкою?
Wiseguy

1
Хоча це вже більше року, я відповім на останнє запитання @ Patrioticcow про те, як це зробити. Ви бачите варіант "успіху", який ви надіслали в метод ajax? Зробіть те ж саме з "помилкою". Як і в "помилка: MyErrorHandlingFunction" або "помилка: функція (помилка) {[Помилка обробки
файлу

Відповіді:


220

"Дані" повинні бути об'єктом розширеного 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 / ...
Kyle Wild

Тут повторюється некоректність; це буде добре для простих сценаріїв, але кодоване URL-адресом повідомлення може бути дуже проблематичним, особливо для масивів матеріалів.
FMM

@FMM та Jonas N - Чи можете ви, хлопці, допомогти мені зрозуміти, як оновити свою відповідь на правильність? Приклади в документах jQuery (тут: api.jquery.com/jQuery.post ) роблять так, що ви можете розмістити або JS-об’єкт, або рядок, що змусило мене повірити, що jQuery буде обробляти всю необхідну серіалізацію рядків .
Кайл Уайлд

Patrioticcow сказав: "що робити, якщо я хочу надіслати 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(без масштабу, це 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, напевно, не те, що потрібно


@ TimLovell-Smith не зміниться, оскільки jQuery ні dataв якому разі не обробляє рядок
Phil

2

Якщо ви надсилаєте цей поштовий запит до міждоменного сайту, вам слід ознайомитися з цим посиланням.

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

Ваш сервер не приймає запит на публікацію на веб-сайті. Отже, конфігурацію сервера потрібно змінити, щоб дозволити запити між веб-сайтами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.