2017-08-02 8 views
3

私は現在、人々がコメントを投稿できる簡単なオンラインフォーラムを構築しようとしています。しかし、私はどのように書くのが正しい方法であるかわかりません。 type = "POST"を選択してフォームを送信した後、Ajaxが自動的に呼び出されますか?Node.jsを使用してNode.jsからJSONデータをHTMLに送信して取得する方法

ルートファイルに正しいプログラムを書いているかどうかわかりません。

ここに私のコードです。ここで

<!DOCTYPE> 
<html lang="en"> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script> 
// $(function(){ 
//  $("#target").submit(function(event){ 
//   event.preventDefault(); 
//   $.post("/users", function(data){ 
//    $("#result").html(JSON.stringify(data)); 
//   }); 
//  }); 
// }); 
//Not sure which way I should use ↑↓ 

$.ajax({ 
type: "GET", 
url: 'http://localhost3000/users', 
data: data, 
dataType: 'json' 
}) 

.done(function(data){ 
    console.log("GET Succeeded"); 
    $('#result').html(JSON.stringify); //What should I put after JSON.stringify? 
}); 

$(function(){ 
    $("#target").submit(function(event){ 
     $.ajax({ 
     type: "POST", 
     url: 'http://localhost3000/users', 
     data: data, 
     dataType: 'json' 
     }) 

     .done(function(data){ 
     console.log("POST Succeeded"); 
     $('#result').html(JSON.stringify); //What should I put after JSON.stringify? 
     }); 
    }); 
}); 



</script> 
</head> 
<body> 

<div id="result"></div> 

<form action="/users" method="post" id="target"> 
    Username:<input type="text" name="username"> 
    <input type="submit" value="Post"> 
</form> 

</body> 
</html> 

私のルートはここ

var express = require('express'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 

var Users = require('../models/users'); 

var userRouter = express.Router(); 
userRouter.use(bodyParser.json()); 

userRouter.route('/') 

.get('/users', function (req, res, next) { 
     Users.find({}).then(function(user){ 
      res.json(user) 
     }).catch(next); 
}) 

.post(function(req, res, next){ 
// res.send("Confirmed"); 
    Users.create(req.body).then(function(user){ 
    res.send(user); 
    }).catch(next); 

    res.json(newUser); 
}); 

module.exports = userRouter; 

ファイルである私のapp.jsが

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 

var url = 'my database'; 
mongoose.connect(url); 

mongoose.Promise = global.Promise; 

var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    // we're connected! 
    console.log("Connected correctly to server"); 
}); 


var routes = require('./router/index'); 
var userRouter = require('./router/users'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/users', userRouter); 
//Error handler for user 
app.use(function(err, req, res, next){ 
    res.status(422).send({error: err.message}); 
}); 

//catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
if (app.get('env') === 'development'){ 
    app.use(function(err, req, res, next){ 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
    }); 

app.use(function(err, req, res, next){ 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

module.exports = app; 

ありがとう:)

+0

フォームにフォーカスがあるか、送信ボタンをクリックしたときに、ユーザが 'enter'を押した瞬間に言及していますか? –

+0

投稿したすべてのコメントがすでにコメントフォームの上にあるフォーラムを作成しようとしています。ユーザーが送信ボタンをクリックすると、そのコメントは既に他のユーザーが投稿したすべてのコメントの下にも投稿する必要があります。 – Asu

+0

ああ送信ボタンをクリックしたときに – Asu

答えて

0

あなたのajax投稿は、フォーム提出時に自動的には呼び出されません。しかし、これは、ブラウザはフォームタグの指定されたエンドポイントにpostを送信すると言います。

コメントが投稿されたときにコメントを自動的に表示する必要がある場合は、スクリプト内のコメント付きのコードブロックを使用できます。

別のアプローチは、次の操作を行うことであろう....

$(function(){ 
    $("#target").submit(function(event){ 
     // add code here to append the form data to the DOM 

     // dont call event.preventDefault() 

     // doing so will take advantage of the browser's 
     // post functionality while giving you a chance 
     // to handle the form data locally prior to the post 

    }); 
}); 
0

を私はpostmanクロームプラグインを示唆している、それはAです安らかなAPIのクライアント、あなたは最初にそれを介してAPIを呼び出すと、APIが完璧を実行する場合、あなたは書くことができますe ajaxは他に投稿します。

+0

を送信し、ajax投稿を書く場合、クロスドメインがjsで許可されていないため、ノードサーバがAccess-Control-Allow-Originヘッダーで応答を送信するのを忘れないでください。 – godtree

+0

大丈夫 – Asu

関連する問題