0

Jade PageからNode JSへのajax POST to POSTの使用方法がわかりません。誰かが例を提供したり、私が持っているスクリプトに欠けているものを教えてくれたりしたら、教えてください。

これはスクリプト ファイルです。

  //Add friends
    $('.addContact').click(function() {
    $.post('/addContact',
       {friendRequest: $(this).data('user')});

    if($(this).html!=='Contact Requested') {
        return $(this).html('Contact Requested');
    }
    });  

app.js ファイルの POST の URL は次のとおりです。

app.post('/addContact', user.addContactPost);

[連絡先を追加] ボタンのクリック イベントに true を投稿し、db のデータが true と表示されている場合は Contact Requested に変更しようとしています。

これはジェイドファイルです:

extends layout
block content   
    div
    legend Search Results
    div#userResults
    for user in ufirstName 
        a(href='/user/#{user.id}')
            p #{user.firstName} #{user.lastName}
        button.addContact Add Contact

ルート ファイルは次のとおりです。

    exports.addContactPost = function(req, res, err) {
    User.findByIdAndUpdate(req.signedCookies.userid, {
                $push: {friendRequest: req.body.friendRequest}
            }, function(err) {
                if(err) {
                    console.log("post2");
                    return console.log('error');
                    //return res.render('addContactError', {title: 'Weblio'}); 

                } 

                else {
                    console.log('postsuccess');
                    //alert('Contact added');
                    res.json({response: true});

                }

            });
};
4

2 に答える 2

0

AJAX リクエストを投稿している場合、クライアント側の JS から何らかの応答が得られ、それに応じてこの応答に反応することが期待されます。それが別のページへの個別のリクエストである場合、おそらくページ全体をレンダリングすることが実際のオプションになります。

ただし、サーバーから応答を取得し、応答に基づいてリロードせずにフロントエンドを更新するだけでよいため、JSON を使用してこの POST 要求でサーバーから応答する必要があります。そして、クライアント側でいくつかのテンプレートを作成し、クライアント側で jQuery またはいくつかのテンプレート ライブラリを使用します。

于 2013-07-18T08:53:07.257 に答える
0

$.post コードが少しずれていると思います。これで問題が解決する場合があります。

 $('.addContact').click(function() {
    $.post('/addContact', { addContact : true }, function(data){
        console.log('posting...');
        $('.addContact').html(data);
    });

    ...
});

$.post に追加したオブジェクトは、サーバーに送信されるものです。最後に指定した関数がコールバックです。関数が戻るときに呼び出されます。それはあなたの混乱の一部だったかもしれないと思います。

ノードルートは次のようになります

exports.addContactPost = function(req, res, err) {
    User.findByIdAndUpdate(req.signedCookies.userid,{
            addContact: req.body.addContact
        }, function(err) {
            if(err) {
                console.log("post2");
                res.render('addContactError', {title: 'Weblio'}); 
            } 
            //assuming express return a json object to update your button
            res.json({ response  : true });
        });
};
于 2013-07-18T14:54:28.737 に答える