【问题标题】:special character % is transmitted to % at server side through jquery AJAX call: Updated特殊字符%通过jquery AJAX调用传输到服务器端的%:更新
【发布时间】:2020-04-06 15:25:59
【问题描述】:

我有一个 HTML 表单作为 java 的输出,它从数据库中获取文本并用它填充该表单的输入。在表单中,我可以编辑提交时的文本 通过 jquery AJAX 调用发送回 java。通过java将文本保存在数据库中。

如果我在文本区域输入test%,它将在服务器端以test% 出现。

假设HTML 表单如下所示:

<form id="form_used_0" action="#" method="post" onclick="hideAjaxList();">
    <textarea name="summary" id=" summary " data-mini="true"><%=HtmlWriter.preformat(summary)%></textarea>
    <a id="saveBtn" class="actionBtn" href="#" data-theme="b" onclick="onSave (this);">Save</a>
</form>

在 saveBtn 点击此 AJAX 调用:

function onSave(thisHref)
{
    var respData = "";
    var id = $("#id").attr("value");
    var params = $("#form_used").serialize()+"&ajaxAction=SaveHeader"+"&id="+id;
    $.post(ajaxURL, params, function(data){
        if(data.length >0) 
        {
            respData = data.substring(data.indexOf("|")+1, data.lastIndexOf("|"));
        }
    }).complete(function(){ 
        if (respData.length > 0)
        {
            var responseData = respData.split("|");
            var status = responseData[0];
            var msg = responseData[1];
            if (status == 'SUCCESS')
            {
                showSuccessMsgHeader(msg);
            }
            else if (status == 'ERROR')
            {
                showErrorMsgsOnly(msg);
            }
        }
    });
}

我尝试使用serializeArray 方法,但现在得到400 Bad request error。我检查了网络选项卡中的form data,发现它在输入字段旁边显示为unable to decode value

function onSave(thisHref)
{
var respData = "";
var id = $("#id").attr("value");
var x = $("#form_used_0").serializeArray();
    var paramsArr = "";
    $.each(x, function(i, field){
              if(i == x.length - 1){
              paramsArr = paramsArr + field.name + "=" + field.value;
      } else {
              paramsArr = paramsArr + field.name + "=" + field.value + "&";
      }
    });
var params paramsArr +"&ajaxAction=SaveHeader"+"&id="+id;
$.post(ajaxURL, params, function(data){
if(data.length >0) 
{
respData = data.substring(data.indexOf("|")+1, data.lastIndexOf("|"));
}
}).complete(function(){ 
if (respData.length > 0)
{
var responseData = respData.split("|");
var status = responseData[0];
var msg = responseData[1];
if (status == 'SUCCESS')
{
showSuccessMsgHeader(msg);
}
else if (status == 'ERROR')
{
showErrorMsgsOnly(msg);
}
}
});
}

任何人都可以帮助我吗?

【问题讨论】:

  • .serialize() 方法以标准 URL 编码表示法创建文本字符串。 查看更多:api.jquery.com/serialize 使用 % 时会出现这种情况。您只需要将其从 HTML 实体转换回 ASCII 字符。
  • 感谢@Twisty。你能告诉我我到底需要在哪里做,我该怎么做。
  • 这将在服务器上完成。

标签: javascript jquery ajax jquery-ui ajaxform


【解决方案1】:

根据 jQuery 文档,.serialize() 方法以标准 URL 编码表示法创建文本字符串。 您可以使用 Apache Commons StringEscapeUtils.unescapeHtml() 在服务器级别解码字符串。 或者,如果需要,您可以将 textarea 中的文本作为附加参数传递,您可以使用它。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多