2015-11-12 3 views
6
'recipient.firstName': 'Fred', 
    'recipient.lastName': 'Johnson' 

Есть ли элегантный способ превратить это в:Как превратить данные HTML POST в JSON?

var recipient = { 
    firstName: 'Fred', 
    lastName: 'Johnson 
} 

Использование JS на интерфейсе? Я хочу POST JSON, но похоже, что это очень легко с HTML, поэтому я хочу перехватить POST с помощью jQuery и отформатировать его в JSON, который я хочу.

EDIT: Я оставляю исходный вопрос выше для большей ясности, но если вы внимательно прочитаете, вы увидите, что проблема, которую я имею, заключается не в отправке данных с AJAX в REST API. Это очень просто и уже реализовано. Что происходит, так это то, что я динамически строю формы с помощью созданного мной механизма шаблонов, а идентификаторы форм и имена построены для представления вложенных данных, таких как recipient.firstName. Однако, когда я получаю эти данные, переданные как JSON в конечную точку API, мне необходимо преобразовать его программно из первого формата во второй формат, и именно этот вопрос действительно задает вопрос, внимательно прочитайте его. Извините за любую путаницу, ответ, который я привел ниже, решает вопрос.

+1

Вы должны попробовать что-то, а затем задать вопрос. Итерации по свойствам, поиск свойств с точками и создание под-объектов для этих свойств. Кажется, не так сложно, я не хочу писать код и не давать вам опыт обучения –

+0

Да, Хуан, это в основном то, что я пишу прямо сейчас. – Antoine

+0

подстройте объект, замените получателя. с пробелом и разобрать строку. JSON.parse (JSON.stringify (original) .replace (/ recipient \ ./ g, '')) – Jules

ответ

-2

Это то, что я я использую:

_.forOwn(options, function(value, key) { 
    if(key.indexOf('.') != -1){ 

    var split = key.split('.') 

    if(!global[split[0]]) { 
     global[split[0]] = {} 
    } 

    global[split[0]][split[1]] = value 
    } 
}); 

Использование global, поскольку я использую NodeJS на сервере.

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

+0

Ваш подход - это то, что нужно исправлять, Google использует Ajax с помощью NodeJs: http://stackoverflow.com/questions/13478464/how-to-send-data-from-jquery-ajax-request-to-node-js-server –

0

с JQuery с формой с помощью serializeArray() и forEach и другой объект:

$(function() { 
 
    var recipient = $("#frm").serializeArray(); 
 
    var output = {}; // Declare an object. 
 

 
    recipient.forEach(function(v, i) { 
 
    output[v.name] = v.value; // Assign the current value to the current key. 
 
    }); 
 

 
    $.ajax({ 
 
    url: "http://httpbin.org/post", 
 
    type: "POST", 
 
    data: JSON.stringify(output), // Send the object. 
 
    contentType: "application/json", 
 
    success: function(response) { 
 
     //console.log(response); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form id="frm" method="post"> 
 
    firstName: 
 
    <br/> 
 
    <input id="firstName" name="firstName" type="text" value="Fred" /> 
 
    <br />lastName: 
 
    <br/> 
 
    <input id="lastName" name="lastName" type="text" value="Johnson" /> 
 
    <br />age: 
 
    <br/> 
 
    <input id="age" name="age" type="text" value="30" /> 
 
</form>

В запросе, вы отправляете: enter image description here

+0

См. Обновление, которое я опубликовал на вопрос. – Antoine

1
var recipient = [{firstName: "Fred",lastName: "Johnson"}] 
       //:: CONVERT TO JSON 
       recipient = JSON.stringify(recipient); 
       //:: POST THE DATA 
       $.post(LINK_url,{post_recipient : recipient },json/*:: json not important, it can be auto guessed. delete ',json' */,function(output){ 
        //var data =jQuery.parseJSON(output);}); 

______________________________edit_______________________________________

если я получить Вас в этот раз ваш выход план текста и вам необходимо конвертировать в формат JSON, если так попробовать это.

var recip = JSON.stringify[{ output }]; 
var data = jQuery.parseJSON(recip); 
var viewdata=''; 
$.each(data, function(key, recipient){viewdata += 
recipient.firstName +" "+recipient.lastName+"<br/>" 
}) 
prompt(viewdata); 
+0

См. Обновление, которое я опубликовал на вопрос. – Antoine

0

UPDATE

Теперь, когда я знаю, что ваша сторона сервера NodeJs вам просто нужно узнать, как позвонить NodeJS стороне сервера методы:

How to send data from JQuery AJAX request to Node.js server

Так что ваш подход является просто неправильно, у вас есть излишне сложная строка данных, которую вы хотите перехватить. Не перехватывайте ничего, отправляйте хорошо отформатированный HTTP POST с самого начала, с jQuery или Javascript на серверный контроллер или API. Подпись вашего метода API должен быть:

DoSomethingWithRecipient(string firstName, string lastName); 

Ваш получатель должен иметь USERID как хорошо, но это до вас. Если вы не используете фреймворк на стороне сервера, который может анализировать входящий запрос и сопоставлять его с вашей функцией DoSomethingWithRecipient, такой как PHP или ASP.NET, чем вы, вы, скорее всего, изобретаете колесо без причины.

чем с JQuery вы просто выполнить Ajax HTTP Post следующим образом:

var recipient = { 
    firstName: 'Fred', 
    lastName: 'Johnson' 
} 

var json = JSON.stringify(recipient); 

$.ajax({ 
    url: '/MyUrl/DoSomethingWithRecipient', 
    type: 'POST', 
    dataType: 'json', 
    data: json, 
    contentType: 'application/json; charset=utf-8', 
    success: function (data) { 
    }, 
    error: function (result) { 
    } 
}); 
+0

См. Обновление, которое я опубликовал на вопрос. – Antoine

+0

Почему бы не сохранить знание формата движка шаблона в движке шаблонов ... создайте JSON в движке шаблонов перед публикацией –

Смежные вопросы