尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)

Posted

技术标签:

【中文标题】尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)【英文标题】:Getting 400 (Bad Request) when trying to post a Blob in FormData to php from ajax (Wordpress Plugin) 【发布时间】:2021-01-07 22:11:53 【问题描述】:

所以请看下面的代码。

        const chunk = file.slice(start,start + chunkSize + 1)
        const fd = new FormData()
        fd.append('data', chunk)
        $.ajax(
            type: 'POST',
            //cache: false,
            //contentType: false,
            //processData: false,
            url: ajax_object.ajaxurl,
            data:
                action:'uploadChunk',
                //chunk: fd
            ,
            success: function(response)
                console.log(response)
            
        )

当我将这些 cmets 留在其中时,代码会返回其预期的响应......但是当我删除 cmets 以便我可以实际发送带有请求的 FormData 时,我收到 400(错误请求)错误。我现在在后端所做的只是回显一个字符串。而已。除非我尝试将 formData 与它一起发送,否则它会起作用。

您可以提供的任何和所有见解都是有帮助的,我非常感谢。谢谢~

【问题讨论】:

【参考方案1】:

将表单数据变量作为数据传递:

 const chunk = file.slice(start,start + chunkSize + 1)
 const fd = new FormData()
 fd.append('data', chunk)

   dataType: "json",
   data:
         data:fd 
       ,

【讨论】:

【参考方案2】:

当您在 ajax 中使用 FormData 对象时,您只需将该对象单独传递给 ajax 函数。如果您必须传递任何其他数据,请使用附加。

    const chunk = file.slice(start,start + chunkSize + 1)
    const fd = new FormData()
    fd.append('data', chunk)
    fd.append('action', 'uploadChunk')
    $.ajax(
        type: 'POST',
        //cache: false,
        contentType: false,
        processData: false,
        url: ajax_object.ajaxurl,
        data: fd,
        success: function(response)
            console.log(response)
        
    )

【讨论】:

以上是关于尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)的主要内容,如果未能解决你的问题,请参考以下文章

在 wordpress 插件下未调用 Ajax 功能

在 WordPress 插件中使用 AJAX

如何使用 JQuery.ajax 从每个 WordPress 帖子中获取缩略图附件?

WordPress 中的 AJAX 只返回 0

使用带有 Wordpress 插件的 ajax 重新加载

Wordpress:如何使用 ajax 调用来调用插件函数?