Languages: English • 中文(简体) • (Add your language)
WP_Ajax_Response is WordPress' class for generating XML-formatted responses to Ajax requests. This is most commonly used to generate responses to custom AJAX actions when using the wp_ajax_ action hook.
To use WP_Ajax_Response, you need to instantiate the class with an array of options, then call the instances send()
method to output the response.
The options array takes the following key=>value pairs:
false
by default, but you can alternatively provide an integer for the previous id, if needed.<supplemental>
element. Keys become element names, and values are embedded in CDATA within those elements. Useful for passing additional information to the browser.Responses are made in the XML-RPC format and may be handled by JavaScript.
A typical WordPress autosave response looks like this:
<?xml version='1.0' standalone='yes'?> <wp_ajax> <response action='autosave_1'> <autosave id='1' position='1'> <response_data> <![CDATA[Draft saved at 9:31:55 pm.]]> </response_data> <supplemental></supplemental> </autosave> </response> </wp_ajax>
Let's break this example down to see what it means:
<wp_ajax>
element.<response>
, which contains the attributes 'action' and 'position'. These attributes correspond to the 'action' and 'position' key=>value pairs defined in the options array.<autosave>
element - this element matches the value of the 'what' key=>value pair in the options array. In your own use, this element can be named whatever you like, provided it is a valid XML element name.<autosave>
), there will either be a <response_data>
element (with CDATA tag) or a <wp_error_data>
element. If you pass a WP_Error object to WP_Ajax_Response as the 'id' in your options array, the <wp_error_data>
element is automatically generated. Otherwise, the <response_data>
element is used with whatever value you passed to WP_Ajax_Response with your option array's "data" value.<supplemental>
element will contain whatever arbitrary structure you decide to pass along with your option array's "supplemental" key=>value pair.This demonstrates a typical response. The first code block shows the PHP required to create a simple response. The second code block shows the generated XML.
$response = array( 'what'=>'foobar', 'action'=>'update_something', 'id'=>'1', 'data'=>'<p><strong>Hello world!</strong></p>' ); $xmlResponse = new WP_Ajax_Response($response); $xmlResponse->send();
The above example would output the following XML:
<?xml version='1.0' standalone='yes'?> <wp_ajax> <response action='update_something_1'> <foobar id='1' position='1'> <response_data><![CDATA[<p><strong>Hello world!</strong></p>]]></response_data> <supplemental></supplemental> </foobar> </response> </wp_ajax>
This demonstrates a typical error response. The first code block shows the PHP required to generate such a response, and the second code block shows the generated XML output. Note that you can just as easily give your response an id of 0
instead of generating a new WP_Error. The choice is up to you.
$response = array( 'what'=>'stuff', 'action'=>'delete_something', 'id'=>new WP_Error('oops','I had an accident.'), 'data'=>'Whoops, there was a problem!' ); $xmlResponse = new WP_Ajax_Response($response); $xmlResponse->send();
The above example would output the following XML:
<?xml version='1.0' standalone='yes'?> <wp_ajax> <response action='delete_something_0'> <stuff id='0' position='1'> <wp_error code='oops'><![CDATA[I had an accident.]]></wp_error> <supplemental></supplemental> </stuff> </response> </wp_ajax>
Note how this response completely disregards our 'data' value.
The WP_Ajax_Response class is located in the file /wp-includes/class-wp-ajax-response.php