it-swarm-eu.dev

Admin-ajax.php připojením stavového kódu k odpovědi Ajax

Píšu plugin, který používá Ajax (jQuery s formulářovým pluginem) prostřednictvím formuláře a funkce php vrací odpověď JSON.

add_action( 'wp_ajax_bubbly-upload', 'bubbly_upload_submit' );

function bubbly_upload_submit() {
    // generate the response
    $response = json_encode( array( 'success' => true ) );

    // response output
    header( "Content-Type: application/json" );
    echo $response;
}

Ve Firefoxu nebyla spuštěna žádná obslužná rutina odezvy jQuery a bylo otevřeno dialogové okno pro uložení s odpovědí JSON. Kdybych vrátil kód HTML, neměl bych problém. V každém případě však byla na konci mé odpovědi připojena hodnota „0“. Po nějaké kopání to vypadá, že jQuery nespustí handler, pokud je JSON reponse neplatný. Toto '0' přidané na konec způsobí, že JSON je neplatný.

Pokud se podívám do kódu admin-ajax.php, vidím toto:

default :
    do_action( 'wp_ajax_' . $_POST['action'] );
    die('0');
    break;
endswitch;

php docs for die říkají, že pokud je předaný parametr řetězec, bude vytištěn těsně před ukončením, pokud se jedná o celé číslo, bude nelze tisknout.

Bez hackování jádra, existuje způsob, jak se mohu tomuto problému vyhnout a stále používat JSON? Je to také chyba, protože nevidím, jak by bylo žádoucí přidat nulu na konec každé odpovědi AJAX ...

2
jjeaton

Vložte die(); do své funkce:

add_action( 'wp_ajax_bubbly-upload', 'bubbly_upload_submit' );

function bubbly_upload_submit() {
    // generate the response
    $response = json_encode( array( 'success' => true ) );

    // response output
    header( "Content-Type: application/json" );
    echo $response;
    die();
}

Reference: WordPress Codex, AJAX v pluginech

4
sorich87