2016-03-31 9 views
1

いくつかのフォーム・データをエンドポイントに送信しようとしています。ノード・サーバーへのフォーム・データの送信

は、ここに私のクライアント側のコードです:

<form name="form" action="http://localhost:8080/geodata" method="post"> 

     <label for="minlat"> MinLat: </label> 
     <input type="text" name="MinLat" value="0"><br> 
     <label for="maxlat"> MaxLat: </label> 
     <input type="text" name="MaxLat" value="1"><br> 
     <label for="minlong"> MinLong: </label> 
     <input type="text" name="MinLong" value="0"><br> 
     <label for="maxlong"> MaxLong: </label> 
     <input type="text" name="MaxLong" value="1"><br> 

     <button type="submit" class="btn btn-success"> Submit <span class="fa fa-arrow-right"></span></button> 

     </form> 

    <script> 

    $(document).ready(function() { 
     $("#form") 
      .submit(function(event) { 

       var formData = { 
       'minLat'   : $('input[name=MinLat]').val(), 
       'maxLat'   : $('input[name=MaxLat]').val(), 
       'minLong'   : $('input[name=MinLong]').val(), 
       'maxLong'   : $('input[name=MaxLong]').val() 
       }; 

       $.ajax({ 
        url: $form.attr('action'), 
        data: formData, 
        cache: false, 
        dataType: 'json', 
        processData: false, 
        type: 'POST', 

        }).done(function(data) { 

         console.log(data); 
        }); 
       event.preventDefault(); 
      }); 
    }); 
    </script> 

私は、サーバー側のコードにenpoint(express.js)があります。

var express = require("express"); 
var path = require("path"); 
var bodyParser = require("body-parser"); 

var app = express(); 
app.use(express.static(__dirname + "/public")); 
app.use(bodyParser.json()); 
    // Initialize the app. 
var server = app.listen(process.env.PORT || 8080, function() { 
    var port = server.address().port; 
    console.log("App now running on port", port); 
}); 

app.post("/geodata", function(req, res) { 
    console.log(req.body); 
    res.send("hi"); 
}); 

を私はエンドポイント/このフォームデータを送信したいですそのデータを使用して結果をクライアント側に返すことができます。まず、私がsubmitを押すと、私の端末に空の{}が得られます(これはサーバサイドのrequest.bodyです)。私はこのrequest.bodyのフォーム値を期待していましたが、受信しませんでした。フォームの値が送信されていることを確認するにはどうすればよいですか?

res.send( "hi")は、最初のページを新しいページにリダイレクトし、そこに "hi"を表示します。私はajax呼び出しを行っていたので、レスポンスは記録されず、Webページは最初のページに残りますか?

+0

を表すオブジェクトを返すよう何になりますサミットをクリックした後、あなたは、ミドルウェアの任意の並べ替えを使用しています体を解析するためにエクスプレス? – Markasoftware

+0

@ Markasoftware: 上記のサーバー側に残りのコードを含めました。私はボディパーサーを使用しています。 – newenthusiast

+0

可能であれば 'Formidable'を使ってみてください - フォームデータ、特にファイルのアップロードを解析するためのnode.jsモジュール。 (https://www.npmjs.com/package/formidable) – CodingDefined

答えて

0

dataType: 'json'は、サーバーからのjsonデータを期待していることを意味します。データタイプを削除して追加する

data : JSON.stringify(formData), 
    contentType: 'application/json', 

contentTypeは、サーバーに送信するデータのタイプです。タグは、()押された場合にHTML5フォームが要求自体を実行するよう、フォームのアクションに「/ジオ」(エンドポイント)

はまた、あなたがいけない

+0

その訂正のおかげで。残念ながら、私はまだconsole.log(req.body)の空の{}を取得します。 – newenthusiast

1

変更はAJAXリクエストを行う必要があり/クリック。

あなたのページには、これまでに応答「/地理データ」ルート から送り返されるとreq.bodyは、フォームデータ

+0

私は別のページにリダイレクトされないようにリクエストしています。したがってajaxです。サーバーが返信した応答を表示するために新しいページにリダイレクトされて以来、私はそれをコード化しているので、うまくいきません。 – newenthusiast

+0

ヘッダーの設定について忘れていました...ページがルートを変更していないのでヘッダーを設定する必要があります。 res.set( 'content-type'、 'application/json')を追加するだけです – echopeak

関連する問題