TinyMCE 的 multipart/form-data、ajax 和 textarea 问题

Posted

技术标签:

【中文标题】TinyMCE 的 multipart/form-data、ajax 和 textarea 问题【英文标题】:Issue with multipart/form-data, ajax and textarea with TinyMCE 【发布时间】:2014-06-11 22:29:12 【问题描述】:

我正在使用 html/php/ajax/jquery,今天我指出了一个让我发疯的小问题。

我有一个 html 表单:

<form method="POST" enctype="multipart/form-data" name="myForm" id="myForm" action="">
    <label class="form-label">Nome</label>
    <input name="nome" type="text" class="form-control"><br>
    <label class="form-label">Descrizione</label>
    <textarea name="descrizione" id="text-editor" placeholder="" class="form-control" rows="10"></textarea>
    <label class="form-label">Stato</label>
    <select name="stato" id="source" style="width:30%">
        <option value="1">Abilitato</option>
        <option value="0">Disabilitato</option>
    </select>
    <h4>Foto profilo</h4>
    <input type="hidden" name="MAX_FILE_SIZE" value="20400000" >  
    <input style="border:0px;" type="file" name="user_foto" id="file"> 
    <div class="form-actions">  
        <div class="pull-right">
            <button type="submit" class="btn btn-success btn-cons"><i class="icon-ok"></i>Inserisci</button>
            <button type="button" class="btn btn-white btn-cons" onclick="window.location.href='index.php'">Indietro</button></a>
        </div>
    </div>
</form>

我正在使用一个 JQuery+Ajax 脚本,它能够在不重新加载页面的情况下触发 php 脚本,并将表单的数据插入到我数据库中的表中:

$(document).ready(function()
    $('#myForm').on('submit',function(e) 
        var formData = new FormData(this);      
        $.ajax(
            url:'inserisciProfessionisti.php',
            data: formData,
            type:'POST',
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success:function(data)
                window.location = 'listaProfessionisti.php'
            ,
            error:function(data)
        );
        e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"===
    );
);

这是我的 php 代码:

<?php
session_start();
session_cache_limiter('nocache');
if(!isset($_SESSION['mail']))
    header("location:login.php");

include("include/connect.php");
$conn=mysql_connect($HOST, $USER, $PASSWORD);
$db_ok=mysql_select_db($DB, $conn);
$nome=$_POST['nome'];
$descrizione = $_POST['descrizione'];
....
$comando="INSERT INTO professionisti('nome','descrizione',...)VALUES('$nome','$descrizione',...)";
$ris=mysql_query($comando, $conn) or die("Errore connessione database: " . mysql_error());
... 

除了 textarea 内容之外,一切都像魅力一样。似乎 textarea 内容不会传递给我的 php 脚本。

【问题讨论】:

var formData = new FormData($(this)[0]);var formData = new FormData(this); 相同 是的,你是对的。我修复了它,但问题仍然存在。 首先,验证您的 HTML。 button 不能是 a 元素的后代,并且您在其中也有未关闭的 div 元素。 好像没问题-i.imgur.com/iogJpLI.jpg 我验证了 HTML。问题再次存在。 【参考方案1】:

问题已解决。 我添加这个onclick="tinyMCE.triggerSave(true,true);" 来提交button,一切都像一个魅力。 我认为这应该是一个 tinyMCE 错误。

【讨论】:

只是为了让用户知道:2019年这个“bug”还在,所以还是需要这个一线救星:-) 2022 年也是如此。该决议与以往一样有效。

以上是关于TinyMCE 的 multipart/form-data、ajax 和 textarea 问题的主要内容,如果未能解决你的问题,请参考以下文章

[转]如何使用multipart/form-data格式上传文件

jmeter实现multipart/form-data类型请求

jmeter实现multipart/form-data类型请求

multipart/form-data

处理没有参数的“multipart/form-data”请求异常

使用 ajax 提交 multipart/form-data 时,文件为空