diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index b0b774663a77aaa3ced16c61461e74255b6af0b6..59941a0a9677efaa20c8898d309c42d2c0875301 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -5,8 +5,6 @@
  * Functions for use with Drupal's Ajax framework.
  */
 
-use Drupal\Component\Utility\Json;
-
 /**
  * @defgroup ajax Ajax framework
  * @{
@@ -227,152 +225,6 @@
  * See @link ajax_commands Ajax framework commands @endlink
  */
 
-/**
- * Renders a commands array into JSON.
- *
- * @param $commands
- *   A list of macro commands generated by the use of ajax_command_*()
- *   functions.
- */
-function ajax_render($commands = array()) {
-  // Ajax responses aren't rendered with html.html.twig, so we have to call
-  // drupal_get_css() and drupal_get_js() here, in order to have new files added
-  // during this request to be loaded by the page. We only want to send back
-  // files that the page hasn't already loaded, so we implement simple diffing
-  // logic using array_diff_key().
-  foreach (array('css', 'js') as $type) {
-    // It is highly suspicious if $_POST['ajax_page_state'][$type] is empty,
-    // since the base page ought to have at least one JS file and one CSS file
-    // loaded. It probably indicates an error, and rather than making the page
-    // reload all of the files, instead we return no new files.
-    if (!\Drupal::request()->request->get("ajax_page_state[$type]", NULL, TRUE)) {
-      $items[$type] = array();
-    }
-    else {
-      $function = '_drupal_add_' . $type;
-      $items[$type] = $function();
-      \Drupal::moduleHandler()->alter($type, $items[$type]);
-      // @todo Inline CSS and JS items are indexed numerically. These can't be
-      //   reliably diffed with array_diff_key(), since the number can change
-      //   due to factors unrelated to the inline content, so for now, we strip
-      //   the inline items from Ajax responses, and can add support for them
-      //   when _drupal_add_css() and _drupal_add_js() are changed to use a hash
-      //   of the inline content as the array key.
-      foreach ($items[$type] as $key => $item) {
-        if (is_numeric($key)) {
-          unset($items[$type][$key]);
-        }
-      }
-      // Ensure that the page doesn't reload what it already has.
-      $items[$type] = array_diff_key($items[$type], $_POST['ajax_page_state'][$type]);
-    }
-  }
-
-  // Render the HTML to load these files, and add AJAX commands to insert this
-  // HTML in the page. We pass TRUE as the $skip_alter argument to prevent the
-  // data from being altered again, as we already altered it above. Settings are
-  // handled separately, afterwards.
-  if (isset($items['js']['settings'])) {
-    unset($items['js']['settings']);
-  }
-  $styles = drupal_get_css($items['css'], TRUE);
-  $scripts_footer = drupal_get_js('footer', $items['js'], TRUE);
-  $scripts_header = drupal_get_js('header', $items['js'], TRUE);
-
-  $extra_commands = array();
-  if (!empty($styles)) {
-    $extra_commands[] = ajax_command_add_css($styles);
-  }
-  if (!empty($scripts_header)) {
-    $extra_commands[] = ajax_command_prepend('head', $scripts_header);
-  }
-  if (!empty($scripts_footer)) {
-    $extra_commands[] = ajax_command_append('body', $scripts_footer);
-  }
-  if (!empty($extra_commands)) {
-    $commands = array_merge($extra_commands, $commands);
-  }
-
-  // Now add a command to merge changes and additions to drupalSettings.
-  $scripts = _drupal_add_js();
-  if (!empty($scripts['settings'])) {
-    $settings = drupal_merge_js_settings($scripts['settings']['data']);
-    array_unshift($commands, ajax_command_settings($settings, TRUE));
-  }
-
-  // Allow modules to alter any Ajax response.
-  \Drupal::moduleHandler()->alter('ajax_render', $commands);
-
-  return Json::encode($commands);
-}
-
-/**
- * Converts the return value of a page callback into an Ajax commands array.
- *
- * @param $page_callback_result
- *   The result of a page callback. Can be one of:
- *   - NULL: to indicate no content.
- *   - An integer menu status constant: to indicate an error condition.
- *   - A string of HTML content.
- *   - A renderable array of content.
- *
- * @return
- *   An Ajax commands array that can be passed to ajax_render().
- */
-function ajax_prepare_response($page_callback_result) {
-  $commands = array();
-  if (!isset($page_callback_result)) {
-    // Simply delivering an empty commands array is sufficient. This results
-    // in the Ajax request being completed, but nothing being done to the page.
-  }
-  elseif (is_int($page_callback_result)) {
-    switch ($page_callback_result) {
-      case MENU_NOT_FOUND:
-        $commands[] = ajax_command_alert(t('The requested page could not be found.'));
-        break;
-
-      case MENU_ACCESS_DENIED:
-        $commands[] = ajax_command_alert(t('You are not authorized to access this page.'));
-        break;
-
-      case MENU_SITE_OFFLINE:
-        $commands[] = ajax_command_alert(filter_xss_admin(t(\Drupal::config('system.maintenance')->get('message'), array('@site' => \Drupal::config('system.site')->get('name')))));
-        break;
-    }
-  }
-  elseif (is_array($page_callback_result) && isset($page_callback_result['#type']) && ($page_callback_result['#type'] == 'ajax')) {
-    // Complex Ajax callbacks can return a result that contains an error message
-    // or a specific set of commands to send to the browser.
-    $page_callback_result += element_info('ajax');
-    $error = $page_callback_result['#error'];
-    if (isset($error) && $error !== FALSE) {
-      if ((empty($error) || $error === TRUE)) {
-        $error = t('An error occurred while handling the request: The server received invalid input.');
-      }
-      $commands[] = ajax_command_alert($error);
-    }
-    else {
-      $commands = $page_callback_result['#commands'];
-    }
-  }
-  else {
-    // Like normal page callbacks, simple Ajax callbacks can return HTML
-    // content, as a string or render array. This HTML is inserted in some
-    // relationship to #ajax['wrapper'], as determined by which jQuery DOM
-    // manipulation method is used. The method used is specified by
-    // #ajax['method']. The default method is 'replaceWith', which completely
-    // replaces the old wrapper element and its content with the new HTML.
-    $html = is_string($page_callback_result) ? $page_callback_result : drupal_render($page_callback_result);
-    $commands[] = ajax_command_insert(NULL, $html);
-    // Add the status messages inside the new content's wrapper element, so that
-    // on subsequent Ajax requests, it is treated as old content.
-    $status_messages = array('#theme' => 'status_messages');
-    $commands[] = ajax_command_prepend(NULL, drupal_render($status_messages));
-  }
-
-  return $commands;
-}
-
 /**
  * Form element processing handler for the #ajax form property.
  *