2

此代码会将表单中的信息提交到 php 文件,一切正常,但是当我写“你好,这是一个文本 + - *”时,它总是从我写的内容中删除“+”符号。不知道为什么,请各位大侠帮帮我

 $(document).ready(function(){
        $("form#submit").submit(function() {
        // we want to store the values from the form input box, then send via ajax below
        var fname     = $('#fname').attr('value');
        var lname     = $('#lname').attr('value'); 

            $.ajax({
                type: "POST",
                url: "Mail.php",
                data: "fname="+ fname + "&lname=" + lname,
                success: function(){
                    $('form#submit').show();
                    //$('form#submit :input').val("");
                    $('div.success').fadeIn();
                }
            });
        return false;
        });
    });
4

5 回答 5

4

更改此行:

data: "fname="+ fname + "&lname=" + lname,

到:

data: "fname="+ encodeURIComponent(fname) + "&lname=" + encodeURIComponent(lname),

您需要转义特殊字符以在 URL 字符串中使用。

于 2012-05-27T10:30:56.873 回答
1

那是因为加号被转换为空格。用于encodeURIComponent转义输入。始终使用某种转义来避免注入。

于 2012-05-27T10:31:47.403 回答
1

或者你可以使用serialize()

$.ajax({
    ...
    data: $(this).serialize()
    ...
});

这将获取表单中的所有 :input 元素并正确编码它们以发送到远程服务器。你也可以这样做:

data: {
    fname: fname,
    lname: lname
}

jQuery 知道您正在尝试发送一个值数组,并会自动对其进行转义。

顺便说一句,这不是很便携:

var fname = $('#fname').attr('value');

更好的方法是这样的:

var fname = $('#fname').val();
于 2012-05-27T10:31:56.483 回答
1

iffnamelnameare 文本框,为什么不使用.val()来检索它们?

var fname = $('#fname').val();
var lname = $('#lname').val(); 

或者更好的是,.serialize()直接在 ajax 上使用表单:

$(function () {
    $("form#submit").submit(function () {
        var form = $(this)
        $.ajax({
            type: "POST",
            url: "Mail.php",
            data: form.serialize() //turns the form data into a query string
            success: function () {
                $('form#submit').show();
                $('div.success').fadeIn();
            }
        });
        return false;
    });
});
于 2012-05-27T10:32:25.297 回答
1
var email = $('#email').val();
var data = 'email=' + encodeURIComponent(email);
var url = 'test.php'
var type = 'post'
var success = function(output){}
var error = function(){}
        $.ajax({
            url:url,
            type:type,
            data:data,
            success:success,
            error:error
        });

对我很好

于 2012-05-27T12:24:01.423 回答