2016-03-31 27 views
1

Bazı form verilerini son noktaya göndermeye çalışıyorum. Ben sunucu tarafı kod üzerinde enpoint (express.js) sahipForm Verilerini Düğüm Sunucusuna Gönderme

<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> 

:

İşte benim istemci tarafı kod

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"); 
}); 

Ben bitiş noktasına bu formu veri göndermek isteyen/geodata ve bu verileri, istemci tarafına bir sonuç göndermek için kullanın. Her şeyden önce, gönderdiğimde terminalimde boş bir {} (sunucu tarafı request.body) var. Bu istekte form değerlerini bekliyordum, ama onları almadım. Form değerlerimin gönderilmesini nasıl sağlayabilirim?

İkinci olarak, res.send ("hi"), ilk sayfamı yeni bir sayfaya yönlendirir ve orada "merhaba" yazdı. Bir ajax çağrısı yaptığım için, yanıt sadece günlüğe kaydedilmemeli ve web sayfası ilk sayfada kalmamalı mı?

+0

Eğer katman herhangi bir tür içinde kullanıyor musunuz form verilerini temsil eden bir nesne döndürür geri '/ coğrafi veri' rota ve req.body gönderilen tepki ne sayfanız olacaktır zirveye tıkladıktan sonra Vücudu ayrıştırmak için ifade mi? – Markasoftware

+0

@Markasoftware: Kodumun kalanını yukarıdaki sunucu tarafına dahil ettim. Vücut ayrıştırıcısı kullanıyorum. – newenthusiast

+0

Mümkünse 'Formidable' Kullanmaya Çalışıyor - Form verilerinin, özellikle dosya yüklemelerinin ayrıştırılması için bir node.js modülü. (https://www.npmjs.com/package/formidable) – CodingDefined

cevap

0

dataType: 'json', sunucudan json verilerini beklediğiniz anlamına gelir. dataType'ı kaldırın ve bu sunucuya gönderdiğiniz verilerin türünü ekleyin. Bir etiket() basıldığında HTML5 formlar isteği kendisi gerçekleştirir olarak form işlemi için '/ coğrafi veri' (son nokta)

ayrıca yok

+0

Bu düzeltme için teşekkürler. Maalesef, hala bir boş {} for console.log (req.body) – newenthusiast

1

Değişim bir ajax isteği yapmak gerekir/tıkladım.

Bunu hiç

+0

için başka bir sayfaya yönlendirilmemeye çalışıyorum, bu yüzden ajax'a başka bir sayfaya yönlendirilmemeye çalışıyorum. Ayrıca, sunucuya geri gönderdiği yanıtı görüntülemek için yeni bir sayfaya yönlendirildim diye kodlamadığım için de çalışıyor. – newenthusiast

+0

, başlıkların ayarlanmasından bahsetmeyi unutmuşum ... sayfanızın rotayı değiştirmediğinden bir başlık ayarlamanız gerekiyor. sadece res.set ('content-type', 'application/json') ekleyin – echopeak

İlgili konular