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

fnamelnameがテキスト ボックスの場合、 を使用.val()してそれらを取得してみませんか?

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

またはそれ以上に、ajax でフォーム.serialize()を直接使用します。

$(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 に答える