0

これらがどこにでもあることは知っていますが、コードにエラーが表示されていないようです。データ型jsonを使用して単純なajax呼び出しを行っています。この呼び出しは成功したように見えますが、何も返さず、アラートが出力されundefinedます。

javascript:

jQuery(document).ready(function() {
    if(jQuery('#statesel').length) {
        var dataString;

        dataString = "nonce=" + dynoselect.post_dyno_select_nonce;
        jQuery.ajax({
            type: "POST",
            url: dynoselect.ajaxurl,
            dataType: "json",
            data: dataString,
            success: function(result) {
                alert(result.status);
            }
        });
    }
}

php:

<?php
add_action("init", "ci_enqueuer");
add_action("wp_ajax_dyno_select", "dyno_select");
add_action("wp_ajax_nopriv_dyno_select", "dyno_select");

function ci_enqueuer() {
    wp_register_script('dyno_select_script', plugins_url('/js/dyno_select_script.js', __FILE__), array('jquery'));
    wp_localize_script('dyno_select_script', 'dynoselect', array('ajaxurl' => admin_url('admin-ajax.php'), 'post_dyno_select_nonce' => wp_create_nonce('dyno_select_nonce')));
    wp_enqueue_script('jquery');
    wp_enqueue_script('dyno_select_script');
}

function dyno_select() {
    $nonce = $_POST['nonce'];

    //checking token, looking for funny business
    if (!wp_verify_nonce( $nonce, 'dyno_select_nonce')) {
        $result['status'] = 'nonce failed';
        $result = json_encode($result);
        echo $result;
        die();
    }

    $result['status'] = 'success';
    echo json_encode($result);
    die();
}
?>

注意として、これはWordpressで行われているため、init関数です。私はそれをしっかりと保つだろうと思った。

4

3 に答える 3

0

jQuery.ajaxコールバックには3つの引数がありsuccessます。1つ目は、指定したタイプ(例ではJSON)のデータです。したがって、ステータスプロパティはありません。

さらに、成功時にアラートを受け取った場合、それはContent-type正しく設定されており、有効なJSONオブジェクトであることを意味します。

使用してみてください:

success: function(result, status, XHR) {
     alert(XHR.status);
}
于 2013-01-28T18:05:32.457 に答える
0

その JSON パラメータ文字列は機能しないようです。通話はサーバーに正しく送信されていますか?

その場合は、これを無視してください。

そうでない場合は、json2.js ( http://www.json.org/js.html ) を含めて、jQuery.ajax を呼び出す前にデータ パラメーターを文字列化することをお勧めします。

var jsonData = { param1: 'something', param2: 999 };
var dataString = JSON.stringify(jsonData);

編集: この受け入れられたSO 回答の例は文字列化されませんが、有効な JSON オブジェクトを構築して渡します。そして、サーバー側の解析を示しています。

于 2013-01-28T18:15:45.997 に答える
0

問題は、POST が ajax 呼び出しと共に「アクション」を渡さなかったことです。「アクション」が URL に追加されるとすぐに、すべてが機能しました。

于 2013-01-30T21:26:46.143 に答える