From 9eaa04648a89ad45db12b2c240cf4fe95cc4aafd Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 27 Sep 2010 00:53:56 +0000 Subject: - Patch #756762 by effulgentsia, fago, sun: AJAX should follow same rules for whether to call drupal_rebuild_form() as non-AJAX submissions. --- includes/ajax.inc | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'includes/ajax.inc') diff --git a/includes/ajax.inc b/includes/ajax.inc index e1ea518d7..2c987f035 100644 --- a/includes/ajax.inc +++ b/includes/ajax.inc @@ -26,14 +26,34 @@ * also return a richer set of @link ajax_commands AJAX framework commands @endlink. * * Standard form handling is as follows: - * - A form element has a #ajax member. + * - A form element has a #ajax property that includes #ajax['callback'] and + * omits #ajax['path']. See below about using #ajax['path'] to implement + * advanced use-cases that require something other than standard form + * handling. * - On the specified element, AJAX processing is triggered by a change to * that element. - * - The form is submitted and rebuilt. - * - The function named by #ajax['callback'] is called, which returns content - * or an array of AJAX framework commands. - * - The content returned by the callback replaces the div on the page - * referenced by #ajax['wrapper']. + * - The browser submits an HTTP POST request to the 'system/ajax' Drupal + * path. + * - The menu page callback for 'system/ajax', ajax_form_callback(), calls + * drupal_process_form() to process the form submission and rebuild the + * form if necessary. The form is processed in much the same way as if it + * were submitted without AJAX, with the same #process functions and + * validation and submission handlers called in either case, making it easy + * to create AJAX-enabled forms that degrade gracefully when JavaScript is + * disabled. + * - After form processing is complete, ajax_form_callback() calls the + * function named by #ajax['callback'], which returns the form element that + * has been updated and needs to be returned to the browser, or + * alternatively, an array of custom AJAX commands. + * - The page delivery callback for 'system/ajax', ajax_deliver(), renders the + * element returned by #ajax['callback'], and returns the JSON string + * created by ajax_render() to the browser. + * - The browser unserializes the returned JSON string into an array of + * command objects and executes each command, resulting in the old page + * content within and including the HTML element specified by + * #ajax['wrapper'] being replaced by the new content returned by + * #ajax['callback'], using a JavaScript animation effect specified by + * #ajax['effect']. * * A simple example of basic AJAX use from the * @link http://drupal.org/project/examples Examples module @endlink follows: -- cgit v1.2.3