52

jQuery を使用してフォームのデータを送信しようとしています。ただし、データはサーバーに到達しません。私が間違っていることを教えてください。

私のHTMLフォーム:

<form id="contactForm" name="contactForm" method="post">
    <input type="text" name="nume" size="40" placeholder="Nume">
    <input type="text" name="telefon" size="40" placeholder="Telefon">
    <input type="text" name="email" size="40" placeholder="Email">
    <textarea name="comentarii" cols="36" rows="5" placeholder="Message"></textarea> 
    <input id="submitBtn" type="submit" name="submit" value="Trimite">
</form>


JavaScript (上記のフォームと同じファイル内):

<script type="text/javascript">
    $(document).ready(function(e) {

        $("#contactForm").submit(function() {
            $.post("getcontact.php", $("#contactForm").serialize())
            // Serialization looks good: name=textInNameInput&&telefon=textInPhoneInput etc
            .done(function(data) {
                if (data.trim().length > 0) {
                    $("#sent").text("Error");   
                } else {
                    $("#sent").text("Success");
                }
            });

            return false;
        })
    });
</script>


サーバー側 PHP ( /getcontact.php ):

$nume = $_REQUEST["nume"]; // $nume contains no data. Also tried $_POST
$email = $_REQUEST["email"];
$telefon = $_REQUEST["telefon"];
$comentarii = $_REQUEST["comentarii"];


私が間違っていることを教えてください。


アップデート

チェックvar_dump($_POST)すると、空の配列が返されました。

奇妙なことは、私のローカル マシンでテストした同じコードが正常に動作することです。ホスティング スペースにファイルをアップロードすると、機能しなくなります。jQuery を使用せずに昔ながらのフォームを実行してみましたが、すべてのデータは正しかったです。

これがどのようにサーバー構成の問題になるのかわかりません。何か案は?

ありがとうございました!

4

8 に答える 8

109

この機能を使用できます

var datastring = $("#contactForm").serialize();
$.ajax({
    type: "POST",
    url: "your url.php",
    data: datastring,
    dataType: "json",
    success: function(data) {
        //var obj = jQuery.parseJSON(data); if the dataType is not specified as json uncomment this
        // do what ever you want with the server response
    },
    error: function() {
        alert('error handling here');
    }
});

戻り型はjsonです

編集:私はevent.preventDefault、そのようなシナリオでブラウザーが送信されるのを防ぐために使用します。

回答にデータを追加します。

dataType: "jsonp"クロスドメイン呼び出しの場合。

beforeSend:// これはリクエスト前のコールバック関数です

complete:// リクエストの終了後に呼び出される関数。そのため、成功またはエラーに関係なく実行する必要があるコードをここに入れることができます

async:// デフォルトでは、すべてのリクエストは非同期で送信されます

cache:// デフォルトでは真。false に設定すると、要求されたページがブラウザによってキャッシュされないように強制されます。

公式ページはこちら

于 2013-03-02T12:10:22.520 に答える
0

フォームからのデータが適切にシリアル化されているかどうかをコンソールでチェックインしましたか?ajaxリクエストは成功しましたか?また、プレースホルダーの引用符を閉じなかったため、問題が発生する可能性があります。

 <textarea name="comentarii" cols="36" rows="5" placeholder="Message>  
于 2013-03-02T11:38:03.483 に答える
0

フォームの送信によって登録を完了すると、ajax によって「Shouttoday」に自動的に登録される 2 つのエンド登録またはユーザー。

var deffered = $.ajax({
     url:"code.shouttoday.com/ajax_registration",
     type:"POST",
     data: $('form').serialize()
    }); 

        $(function(){ 
            var form;
            $('form').submit( function(event) {
                var formId = $(this).attr("id");
                    form = this;
                event.preventDefault();
                deffered.done(function(response){
                    alert($('form').serializeArray());alert(response);
                    alert("success");
                    alert('Submitting');
                    form.submit();
                })
                .error(function(){
                    alert(JSON.stringify($('form').serializeArray()).toString());
                    alert("error");
                    form.submit();
                });
            });
         });
于 2016-07-20T11:43:53.800 に答える
0

POST または GET の場合、firebug を調べましたか?

コンソールの表示を確認してください。

テスト スクリプトを挿入します。

console.log(data);

何かが表示されている場合は、サーバーからの応答を確認できます。

于 2013-03-02T12:12:45.870 に答える
0

問題は PHP 構成である可能性があります。

php.ini ファイルのmax_input_varsの設定を確認してください。

例として、この設定の値を 5000 に増やしてみてください。

max_input_vars = 5000

次に、Webサーバーを再起動して試してください。

于 2015-08-19T06:39:15.807 に答える