Как мы можем передать данные JSON в теле запроса http в форме сообщения - PullRequest
0 голосов
/ 15 октября 2018

У нас была форма, которая отправляла данные на страницу в новой вкладке.Например,

<form name='formOne' action='/action.cfm' method='post' target='_blank'>
    <input type='hidden' name='employee' value='{"first_name": "test","last_name":"name"}' />
    <input type='hidden' name='contact' value='{"phone": "1233214090","fax":"1098760982"}' />
    <input type="submit" />
</form> 

Но теперь страница "action.cfm" ожидает значение JSON в теле http-запроса.Например,

{
    "employee": {
        "first_name": "test",
        "last_name": "name"
    },
    "contact": {
        "phone": "1233214090",
        "fax": "1098760982"
    }
}

Не уверен, как в этом случае мы можем отправить данные JSON в теле запроса http в форме сообщения.Пожалуйста, предложите, если это возможно, или есть другой подход для достижения этой цели.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Чтобы сохранить его в ColdFusion, вы можете получить JSON следующим образом на странице действий:

<cfif structKeyExists(form, "employee")><!--- Then form has been submitted --->
    <cfset employeeData = serializeJSON(form)>
</cfif>
0 голосов
/ 16 октября 2018

В ColdFusion вы отправляете json в теле почтового запроса следующим образом:

string function postAsJson(
    required struct data) {

    var responseStr = "";

    try {

        var http = new http(argumentCollection={
            "method": "post",
            "timeout": 50,
            "encodeUrl": false
        });

        http.addParam(type="body", value=serializeJSON(Arguments.data));
        http.addParam(type="header", name="content-type", value="application/json");
        http.setURL("your form handler");

        var httpResult = http.send().getPrefix();

        if (httpResult.status_code == 200) {
            responseStr = httpResult.fileContent;
        }

    } catch (any err) {
        responseStr = "<p>#err.message#</p>";
    }

    return responseStr;
}

myData = {
    "this": "and",
    "that": true
};

result = postAsJson(myData);
writeOutput(result);

А в обработчике запроса вы получаете такие данные:

requestData = getHttpRequestData();
if (isJSON(requestData.content)) {
    myData = deserializeJSON(requestData.content);
    writeDump(myData);
}
else {
    writeOutput("<p>Invalid request</p>");
}

(я не проверял это в ACF, но я знаю, что это работает в Lucee - 5.2.x)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...