簡體   English   中英

從服務器接收ajax回調中的數據,而無需重新加載並更新當前頁面。 Express 4和節點

[英]Receive data in ajax call back from server without reloading and update current page. Express 4 and Node

我有一個表格

form#form-reflow(action='/', method='post', 
                    onsubmit="docreflow()")
    input#textinp(type="text", name="textinp")
    input#submit(type="submit", name="submit") 

運行以下ajax客戶端腳本以將表單數據發送到Express。

function docreflow() {
    $('#form-reflow').on('submit', function (evt) {
        evt.preventDefault();

        $.post($('#form-reflow').attr( 'action' ),
            {  
                data: $("#textinp").val(),
                headers: {'X-Requested-With': 'XMLHttpRequest'},
                dataType: 'text',
                accepts: {
                            text: 'text/plain'
                        },
            })
            .done(function onDone (data) {
                            console.log("returned data is: ");
                            var data = JSON.parse(data).data;
                            console.log(data);
                            $('#form-reflow').html(data);
                        }
            )
            .fail(function onFail(err) {
                $('#form-reflow').html("<p> There Wazza Khold Dey</p>");
            });
    })
}

我希望服務器POST方法不重新加載頁面。

相反,我想知道如何以html形式在客戶端上接收數據:這是jade btw。

div#ajaxMsg
    p It actually works!
    p Data is "#{data}"

從控制器方法,而它做類似的事情

res.render('afterReload.jade', {some data...})

該頁面不應在ajax上重新加載,而應僅在此處包含呈現的html代碼段:

$('#form-reflow').html(data);

例如,考慮到您將向紐約編寫AJAX api,而NYT api使用jsonp來發送具有定義的Callback的消息,而我只能將該數據包含在當前頁面中。

可以說我只做一個json渲染。 從服務器我發送json數據

如果成功,該函數將把數據附加到客戶端。

如何對客戶端響應進行“不重新加載” AJAX服務器?

隨時要求我進一步澄清。

根據這個

更改evt類型以更改不會影響行為。 仍然會重新加載頁面。

當前和POST頁面控制器路由都定義為'/'

更新我已經刪除了html5 onsubmit事件。 沒必要:

  form#form-reflow(action='/', method='post')
    input#textinp(type="text", name="textinp")
    input#submit(type="submit", name="submit")  

更新#2

不能解決我的問題

即使我添加return false; 在該腳本中的函數調用結束時,

控制器功能:

function ajaxReq(req, res) {

            console.log(req.body);

            if (req.accepts('text')) {
                //#TODO: do something with this to doc reflow instead page reload
                res.json({data: req.body.textinp});
            }
        };

仍然重新加載頁面。

我不同意@mccannf指出它是重復的。

不,這不能解決我的問題。 嘗試實施快速應用程序。 在這里,您在'/'處呈現某種形式,該形式使用ajax發布到服務器,並且它應將.jade / template文件中的html代碼片段作為html塊重新呈現回成功的ajax調用,並替換當前的html代替形式。

那是我的問題的核心。

更新#3

我已經能夠檢查並進行渲染,但是沒有進行部分渲染。 有誰知道如何在express 4中使用它而不加載整個頁面並將值返回給ajax調用?

這解決了我的問題,現在它是一個工作頁面:

script(src="js/scr.js")

視圖是這樣,還有更多:

form#form-reflow(action='/scr')
    input#textinp(type="text", name="textinp")
    input#submit(type="submit", name="submit")

scr是沒有函數包裝的。 例如:

$('#form-reflow').submit(function (e) {
        e.preventDefault();
        var posting = $.post( $('#form-reflow').attr( 'action' ), 
            {data:$("#textinp").val()
            })
        posting.done(
            function onDone (val) {
                $("#form-reflow").removeAttr('action');
                $("#form-reflow")
                .html("<p> hello baby " + val.data + "</p>");
                });
        return false;
    });

控制器是:

some_controller = function some_controller(req, res) {


            if (req.accepts(['json', 'jsonp'])) {


                res.setHeader("Content-Type", "application/json");

                var json_data = {data: req.body.data,
                                };
                res.jsonp(json_data);

            }
        };
app.use('/', some_router);
some_router.post('/scr',some_controller);

因此,這無需渲染到新頁面即可工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM