插件管理页面AJAX-管理调用返回0,URL设置正确。实现了本地化脚本,但没有修复它

时间:2019-07-02 作者:peter k

我正在尝试提交一个Ajax调用,将所选图像的源URL从WordPress媒体库传输到我的插件设置页面中的PHP。单击“保存”后,我经常会遇到“错误,错误请求”。尝试调用我的AJAX URL时的状态400。

我的AJAX URL当前是domain/wp-admin/admin-AJAX。确实存在的php。我曾尝试设置AJAX调用应该期望的多种数据类型,但我遇到了相同的错误。

如果在javascript中删除AJAX调用的URL部分,它确实会导致success函数,但success的参数“response”由页面的HTML组成,而不是我想要传输的数据。

HTML

<form method=\'post\'>
  <div class=\'image-preview-wrapper\'>
    <img id=\'image-preview\' src=\'<?php echo wp_get_attachment_url( get_option( \'media_selector_attachment_id\' ) ); ?>\' height=\'100\'>
  </div>
  <input id="upload_image_button" type="button" class="button" value="<?php _e( \'Upload image\' ); ?>" />
  <input type=\'hidden\' name=\'image_attachment_id\' id=\'image_attachment_id\' value=\'<?php echo get_option( \'media_selector_attachment_id\' ); ?>\'>
  <input type="submit" name="submit_image_selector" value="Save" id="saveMediaButton" class="button-primary">
</form>
通过enques加载Javascript

function enqueue_my_scripts() {

  wp_enqueue_script( \'media-library\', plugins_url( \'/media-library.js\', __FILE__ ), array(), \'1.0.0\', true );

  wp_localize_script( \'media-library\', \'my_ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );

}

add_action( \'admin_enqueue_scripts\', \'enqueue_my_scripts\' );
通过单击ID\'ed submitMediaButton按钮调用的JavaScript

$(\'#saveMediaButton\').click(function(e) {
  e.preventDefault();
  $.ajax({
    type: "POST",
    dataType: "html",
    url: my_ajax_object.ajax_url,
    data: {
      image_attachment_id: document.getElementById("image-preview").getAttribute(\'src\')
    },
    success: function(response) {
      var jsonData = response;
      console.log(response);
      console.log(document.getElementById("image-preview").getAttribute(\'src\'));
    },
    error: function(jqxhr, textStatus, errorThrown) {
      console.log(my_ajax_object.ajax_url);
      console.log(jqxhr);
      console.log(textStatus);
      console.log(errorThrown);
    }
  });
});

2 个回复
最合适的回答,由SO网友:Milan Hirpara 整理而成

您好,请尝试以下代码

jquery:

$(\'#saveMediaButton\').click(function(e) {
    e.preventDefault();

    $.ajax({
        url         : my_ajax_object.ajax_url,
        type        : \'post\',
        data        : {
            action              : \'action_upload_img\',
            image_attachment_id : document.getElementById("image-preview").getAttribute(\'src\')
        },
        dataType    : \'html\',
        success     : function( response ) {

            var jsonData = response;
            console.log(response);
            console.log(document.getElementById("image-preview").getAttribute(\'src\'));

        },
        error       : function(jqxhr, textStatus, errorThrown) {
            console.log(my_ajax_object.ajax_url);
            console.log(jqxhr);
            console.log(textStatus);
            console.log(errorThrown);
        },
    });

});
PHP代码:

add_action( \'wp_ajax_action_upload_img\', \'action_upload_img\' );
add_action( \'wp_ajax_nopriv_action_upload_img\', \'action_upload_img\' );
function action_upload_img(){

    $response               = [];
    $response[\'data\']       = $_POST;

    //Your code
    update_option( \'media_selector_attachment_id\', $_POST["image_attachment_id"] ); 

    wp_send_json( $response );
    wp_die();
}

SO网友:Chetan Vaghela

请尝试以下操作:

在数据中添加操作参数。

data: {
      action:"this_ajax_action",image_attachment_id: document.getElementById("image-preview").getAttribute(\'src\')
    },
外接程序functions.php

add_action( \'wp_ajax_this_ajax_action\', \'this_ajax_action_callback\' );
add_filter( \'wp_ajax_nopriv_this_ajax_action\', \'this_ajax_action_callback\');
function this_ajax_action_callback()
{
    if(isset($_POST["image_attachment_id"]) && !empty($_POST["image_attachment_id"]));

     # here what you want to do with attachment id
     $data = "";

      echo $data;
      die();
}

相关推荐

为什么在动态更改短码内容后不再检测到我的AJAX事件

我有两个input select (下拉)在我的快捷代码的内容中。第一个是在初始化短代码内容时创建的,而第二个是在用户选择第一个下拉列表的值时创建的。为此,第二个是使用Ajax句柄动态创建的。选择第二个条目必须显示一些相应的数据。第一个下拉菜单工作正常:它显示第二个下拉菜单及其值。当我想选择第二个下拉列表的值时,就会出现问题。我使用相同的jQuery事件(element.on(\'change\' ...) 它永远不会熄灭。它与第一个完全相同,但不起作用。谁能给我解释一下为什么?以下是我的PHP代码:&l