mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-28 15:40:23 +08:00
Added form.c
This commit is contained in:
parent
c5287b9044
commit
35bd2b6032
@ -50,6 +50,9 @@ upload: upload.c ../mongoose.c
|
||||
auth: auth.c ../mongoose.c
|
||||
$(CC) auth.c ../mongoose.c $(OUT) $(CFLAGS)
|
||||
|
||||
form: form.c ../mongoose.c
|
||||
$(CC) form.c ../mongoose.c $(OUT) $(CFLAGS)
|
||||
|
||||
mjpg: mjpg.c ../mongoose.c
|
||||
$(CC) mjpg.c ../mongoose.c $(OUT) $(CFLAGS)
|
||||
|
||||
|
81
examples/form.c
Normal file
81
examples/form.c
Normal file
@ -0,0 +1,81 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "mongoose.h"
|
||||
|
||||
static int static_value = 123; // Exposed and changeable via the form
|
||||
|
||||
static void print_html_form(struct mg_connection *conn) {
|
||||
mg_send_header(conn, "Content-Type", "text/html");
|
||||
mg_send_header(conn, "Cache-Control", "max-age=0, post-check=0, "
|
||||
"pre-check=0, no-store, no-cache, must-revalidate");
|
||||
|
||||
// Note that all the following normally should reside in static HTML page
|
||||
mg_printf_data(conn, "%s", "<html><head>");
|
||||
// It is better to use local copy though
|
||||
mg_printf_data(conn, "<script src=\"%s\"></script>",
|
||||
"http://code.jquery.com/jquery-1.11.0.min.js");
|
||||
mg_printf_data(conn, "%s", "<script> jQuery(function() {\n");
|
||||
// Here is the ajax call that fetches data from the device and
|
||||
// updates the form
|
||||
mg_printf_data(conn, "%s", "$.ajax({ url: '/get_value', dataType: 'json', "
|
||||
"success: function(d) { $('#val').val(d.value); }});\n");
|
||||
// This ajax call is triggered when submit button is pressed. It sends new
|
||||
// value to the device.
|
||||
mg_printf_data(conn, "%s", "$(document).on('click', '#button', function() {"
|
||||
" $.ajax({ url: '/set_value', dataType: 'json', "
|
||||
" data: { new_value: $('#val').val() } });\n"
|
||||
" return false; });\n");
|
||||
mg_printf_data(conn, "%s", "});</script>");
|
||||
mg_printf_data(conn, "%s", "</head><body>");
|
||||
mg_printf_data(conn, "%s", "<h1>Ajax form submission example</h1>");
|
||||
mg_printf_data(conn, "%s", "<form>");
|
||||
mg_printf_data(conn, "%s", "Device value: <input type=text id=val />");
|
||||
mg_printf_data(conn, "%s", "<input type=submit id=button />");
|
||||
mg_printf_data(conn, "%s", "</form>");
|
||||
mg_printf_data(conn, "%s", "</body></html>");
|
||||
}
|
||||
|
||||
static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
|
||||
if (ev == MG_REQUEST) {
|
||||
if (strcmp(conn->uri, "/get_value") == 0) {
|
||||
mg_printf_data(conn, "{\"value\": %d}", static_value);
|
||||
} else if (strcmp(conn->uri, "/set_value") == 0) {
|
||||
// This Ajax endpoint sets the new value for the device variable
|
||||
char buf[100] = "";
|
||||
mg_get_var(conn, "new_value", buf, sizeof(buf)); // Get form variable
|
||||
static_value = atoi(buf); // Set new value
|
||||
mg_printf_data(conn, "%s", "{\"success\": true}");
|
||||
printf("Setting value to [%d]\n", static_value); // Debug trace
|
||||
} else {
|
||||
// Better way is to set "document_root" option, put "index.html" file
|
||||
// into document_root and return MG_FALSE here. We're printing HTML
|
||||
// page by hands just to keep everything in one C file.
|
||||
print_html_form(conn);
|
||||
}
|
||||
return MG_TRUE;
|
||||
} else if (ev == MG_AUTH) {
|
||||
return MG_TRUE;
|
||||
}
|
||||
|
||||
return MG_FALSE;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
struct mg_server *server;
|
||||
|
||||
// Create and configure the server
|
||||
server = mg_create_server(NULL, ev_handler);
|
||||
mg_set_option(server, "listening_port", "8000");
|
||||
|
||||
// Serve request. Hit Ctrl-C to terminate the program
|
||||
printf("Starting on port %s\n", mg_get_option(server, "listening_port"));
|
||||
for (;;) {
|
||||
mg_poll_server(server, 1000);
|
||||
}
|
||||
|
||||
// Cleanup, and free server instance
|
||||
mg_destroy_server(&server);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user