NodeJS-发送简单响应

时间:2013-07-25 17:28:07

标签: javascript node.js jquery

我尝试发送回Chrome浏览器200 OK响应,并且浏览器没有按照我的预期做出反应,他清理屏幕而不是更改特定的'div',这是我的代码:

我的服务器:(node.js):

    function postHandler(request, response) {
    request.on('data', function(data) {
        body += data;
        var parseBody = queryString.parse(body);

        response.writeHead(200, {"Content-Type": "text/plain"});
                response.end("<div>divi</div>");
    });
    response.on('end', function() {
        console.log("End_Body: " + body);
    });
}

我的JavaScript浏览器ajax调用如下:

$(document).ready(function() {
$("#register_form").ketchup();

var request;
$("#submit_btn")
    .on('click',function() {

        var username = $('#reg_username').val();
        var password = $('#reg_password').val();
        var firstname = $('#firstname').val();
        var lastname = $('#lastname').val();
        var age = $('#age').val();

        request = $.ajax({ url: "/welcome.html",
            type: "POST",

            data: {
                'username': username,
                'password': password,
                'firstname': firstname,
                'lastname': lastname,
                'age': age
            }});

        request.done(function (response, textStatus, jqXHR){
            $("#server_answer").text("success");
        });
        request.fail(function (jqXHR, textStatus, errorThrown){
            $("#server_answer").text("fail");


           });

        });
});

我做错了什么???

拜托,请救我一段时间:) 先谢谢!

4 个答案:

答案 0 :(得分:1)

尽量不发送来自'数据'的响应,但是来自'结束'...... 在客户端中,尝试使用success方法。

请尝试以下操作...在服务器中:

function postHandler(request, response) {
var body = '';
//when the request comes with some body
request.on('data', function (data) {
        body += data;
        // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB 
        if (body.length > 1e6) { 
            // FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
            request.connection.destroy();
        }
    });

//when the request is finished. (maybe it's data is long and its takes time)
request.on('end', function () {
      console.log("End_Body: " + body);
      response.writeHead(200, { 'Content-Type': 'text/plain'});
      response.write('<div>divi</div>'); 
      response.end();
    });//end of 'end' event
}

请注意,在这里你实际上是在忽略身体(我试图保持尽可能接近你的代码)......

在客户端:

$(document).ready(function() {
    $("#register_form").ketchup();

    $("#submit_btn").on('click',function() {
        var username = $('#reg_username').val();
        var password = $('#reg_password').val();
        var firstname = $('#firstname').val();
        var lastname = $('#lastname').val();
        var age = $('#age').val();

        $.ajax({ url: "",
                 type: "POST",
                 data: {'username': username,
                        'password': password,
                        'firstname': firstname,
                        'lastname': lastname,
                        'age': age},
                 success: function(data) {//on success
                      $("#server_answer").text("success");
                 },
                 fail: function (jqXHR,textStatus,errorThrown){ // when the ajax call fails
                      $("#server_answer").text("fail");

                 }
        }); //of ajax
    });//of on 'click'
});

请注意,我删除了url(put''代替)所以它的默认值是localhost ...你按照你的方式将post请求发送到'/welcome.html',但这不是你处理的地方这些请求(可能在server.js或其他东西 - 这是你的本地主机)

我使用了一些this

答案 1 :(得分:1)

我没有执行你的代码,但我的猜测是当你的点击处理程序结束时你的页面会刷新。

尝试在点击处理程序的末尾添加return false;

答案 2 :(得分:1)

正如Zohar Yahav所说,请尝试以下方法:

statusCode: {
200: function() {
alert('whatever');
}},

并且不要忘记..

return false

答案 3 :(得分:0)

您可以测试以下更改吗?在服务器中:

function postHandler(request, response) {
    request.on('data', function(data) {
        body += data;
    });
    request.on('end', function() {
        var parseBody = queryString.parse(body);

        response.writeHead(200, {"Content-Type": "text/plain"});
                response.end("<div>div</div>");
        console.log("End_Body: " + body);
    });
}

在浏览器上

request.done(function(msg) {
    $("#server_answer").text("success");
});

request.fail(function(jqXHR, textStatus) {
    $("#server_answer").text("fail");
});

您为donefail提供的参数适用于ajax调用中给出的successerror处理程序。