0

そこで、ユーザーがWordpressサイトのフロントエンドから画像をアップロードできるようにしようとしています。アカウントなどにサインアップする必要はありません。私はjQueryプラグインAJAXUploadを使用してフロントエンドのすべてを処理しており、完全に機能しています。ただし、WordpressのAJAX関数を呼び出すたびに、応答がまったく返されません。単に弦を消してみましたが、まだ何も返されません。

これが、画像のアップロードを受け入れることになっているWordpressバックエンドにあるコードです。

if( !function_exists( 'ni_handle_file_upload' ) ){
function ni_handle_file_upload() {
    //global $wpdb, $global_contest_settings;
    die(json_encode("test"));
    /*if ($_FILES) {
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');

        $attachment_ids = array();
        foreach ($_FILES as $file => $array) {
            // check to make sure its a successful upload
            if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                die(json_encode(array(
                    "status" => "error",
                    "message" => "There was an error uploading the file."
                )));
            }

            $attachment_ids[] = media_handle_upload( $file );
        }
    }

    die(json_encode(array(
        "status" => "success",
        "message" => "File uploaded successfully",
        "attachment_ids" => $attachment_ids
    )));*/
}
add_action( 'wp_ajax_handle_file_upload', 'ni_handle_file_upload' );
add_action( 'wp_ajax_nopriv_handle_file_upload', 'ni_handle_file_upload' );
}

これが、ファイルをアップロードするためにフロントエンドで使用しているJSです。

new AjaxUpload('thumb', {
action: Contest.ajaxurl,
name: 'image',
data: {
    action: "handle_file_upload"
},
autoSubmit: true,
responseType: "json",
onSubmit: function(file, extension) {
    $('div.preview').addClass('loading');
},
onComplete: function(file, response) {
    thumb.load(function(){
        $('div.preview').removeClass('loading');
        thumb.unbind();
    });
    thumb.attr('src', response);
}
});

私はJS全体にブレークポイントを設定しましたが、onCompleteイベントが発生しないという事実と、Chromeの[ネットワーク]タブで確認できることから、Wordpressのadmin-ajax.phpが呼び出されることを除いて、すべて問題ありません。 1行のコードを実行しているだけでも、応答が返されることはありません。私はここで何を逃しましたか?

4

1 に答える 1

0

WordPressでは、 WP_Ajax_Responseを使用して応答を送り返す必要があります。例:

$response = array(
   'action'=>'handle_file_upload',
   'data'=> array('status' => 'success', 'message' => 'File uploaded successfully',     'attachment_ids' => $attachment_ids)
);

$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();
于 2013-07-01T16:33:08.227 に答える