[WordPress] Ajax 応答から XML データを取得

スポンサーリンク

質問

次の XML 応答を得ているバックアップ データを抽出するワードプレスの AJAX リクエストやトラブルから。それは、CDATA として解析されている理由を見ることができないだと思います

<?xml version="1.0" encoding="UTF-8"?>
<wp_ajax>
   <response action="mz_mindbody_ajax_add_to_class_0">
      <object id="0" position="1">
     <response_data><![CDATA[error]]></response_data>
     <supplemental>
        <classID><![CDATA[2237]]></classID>
        <message><![CDATA[Error in add to class (2237)]]></message>
     </supplemental>
      </object>
   </response>
</wp_ajax>

これは、php、AJAX 呼び出しを処理するために:

<script type='text/javascript'>
/* <![CDATA[ */
var my_parameters = {"ajaxurl":"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php"};
/* ]]> */
</script>
<?php

// Ajax Handler
add_action( 'wp_ajax_my_ajax_handler', 'my_ajax_handler' );
function my_ajax_handler() {
    // Get the Post ID from the URL
    $classID = $_REQUEST['classID'];

    // Instantiate WP_Ajax_Response
    $response = new WP_Ajax_Response;

    if( wp_verify_nonce( $_REQUEST['nonce'], 'nonce-name' . $classID )){
    //Do something here

    $response->add( array(
        'data'  => 'success',
        'supplemental' => array(
        'classID' => 'did it',
        'message' => 'Class ID goes here', // ideally want to show $classID
        ),
     ) );
    } else {
    // Build the response if an error occurred
    $response->add( array(
        'data'  => 'error',
        'supplemental' => array(
        'classID' => 'nothing to see here',
        'message' => 'Error in add to class',
        ),
    ) );
    }
    // Whatever the outcome, send the Response back
    $response->send();

    // Always exit when doing Ajax
    exit();
}
//End Ajax

このコードは、jQuery:

(function($){
$(document).ready(function($) {
    $( '.my_class' ).click( function( e ) {
        var link = this;
        var id   = $( link ).attr( 'data-id' );
        var nonce = $( link ).attr( 'data-nonce' );

        // This is what we are sending the server
        var data = {
            action: 'my_function',
            classID: id,
            nonce: nonce
        }
        // Change text of link
        $( link ).text( 'DOING IT' );

        // Post to the server
        $.post( my_parameters.ajaxurl, data, function( data ) {
            // Parse the XML response with jQuery
            // Get the Status
            console.log(data); //the XML data posted above
            var status = $( data ).find( 'response_data' ).text();
            // Get the Message
            var message = $( data ).find( 'supplemental message' ).text();
            // If we are successful, add the success message and remove the link
            console.log(status); // empty string
            if( status == 'success' ) {
            $( link ).parent().after( '<p><strong>' + message + '</strong></p>').remove();
            } else {
            // An error occurred, alert an error message
            alert( message );
            }
        });
        // Prevent the default behavior for the link
        e.preventDefault();
        });
    }); 
})(jQuery);

私は次のチュートリアルで

$response->add()

呼び出し関数内では。鉱山 ではない という事実である何がここでの問題の原因か?

待つ – 私が誤って伝えている

data

「オブジェクト」の一部 (またはすべての) であるかもしれない問題。「オブジェクト」の全体のデータが実際には 文字列、コンソールのように見える:

<script type='text/javascript'>
/* <![CDATA[ */
var mz_mbo_params = {"ajaxurl":"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php"};
/* ]]> */
</script>
<?xml version='1.0' encoding='UTF-8' standalone='yes'?><wp_ajax><response action='mz_mindbody_ajax_add_to_class_0'><object id='0' position='1'><response_data><![CDATA[error]]></response_data><supplemental><classID><![CDATA[nothing to see here]]></classID><message><![CDATA[Error in add to class]]></message></supplemental></object></response></wp_ajax>

答え

更新

与え応答

data
string

;注意してください、いない実際の raw

string

の引用について、特定の

data

で返される

var data = "<script type='text/javascript'>/* <![CDATA[ */var mz_mbo_params = {\"ajaxurl\":\"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php\"};/* ]]> */</script><?xml version='1.0' encoding='UTF-8' standalone='yes'?><wp_ajax><response action='mz_mindbody_ajax_add_to_class_0'><object id='0' position='1'><response_data><![CDATA[error]]></response_data><supplemental<classID><![CDATA[nothing to see here]]></classID><message><![CDATA[Error in add to class]]></message></supplemental></object></response></wp_ajax>";

jQuery.parseHTML() を利用して試す

var xml = $.parseHTML(data, document, false)[1]; // remove `script` element
// do stuff
$(xml).find("message");

< hr/>

解析された

xml
document

引数の

documentElement

jQuery() を呼び出して、

data

引数で $.parseXML() を利用して試す

// response `data` from `$.post()` callback
var xmlDocument = $.parseXML(data); 
// `documentElememt` `<wp_ajax></wp_ajax>` of response `xml` `data`
var xml = $(xmlDocument.documentElement); 
var status = xml.find("response_data").text();
var message = xml.find("supplemental message").text();
console.log(status); // empty string
if ( status == "success" ) {
   $( link )
   .parent()
   .after("<p><strong>" + message + "</strong></p>").remove();
} else {
   // An error occurred, alert an error message
   alert( message );
}

 
var data = '<wp_ajax><response action="mz_mindbody_ajax_add_to_class_0"><object id="0" position="1"><response_data><![CDATA[error]]></response_data><supplemental><classID><![CDATA[2237]]></classID><message><![CDATA[Error in add to class (2237)]]></message></supplemental></object></response></wp_ajax>'
var xmlDocument = $.parseXML(data);
var xml = $(xmlDocument.documentElement);
var status = xml.find("response_data").text();
var message = xml.find("supplemental message").text();
console.log(status); // empty string
if ( status == "success" ) {
   $( link )
   .parent()
   .after("<p><strong>" + message + "</strong></p>").remove();
} else {
   // An error occurred, alert an error message
   alert( message );
}
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

http://stackoverflow.com/questions/29312195/getting-xml-data-from-ajax-response

スポンサーリンク

Leave a Reply