3

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

4 に答える 4

1

「データ」からではなく、「終了」からの応答を送信するようにしてください...クライアントでは、代わりに成功メソッドを使用してみてください。

以下を試してください...サーバー内:

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を削除したことに注意してください(代わりに '' を入れてください)ので、デフォルトはローカルホストです...あなたが実際に投稿リクエストを「/welcome.html」に送信した方法ですが、それはこれらのリクエストを処理する場所ではありません(おそらくserver.jsか何かで-これはあなたのローカルホストです)

私はこれのいくつかを使用し ました

于 2013-07-25T18:13:45.530 に答える
1

私はあなたのコードを実行しませんでしたが、クリック ハンドラーが終了するとページが更新されると思います。

return false;クリック ハンドラの最後に追加してみてください。

于 2013-07-25T19:27:36.480 に答える
1

Zohar Yahavが述べたように、次のことを試してください。

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

そして忘れないで..

return false
于 2013-07-25T22:08:04.997 に答える
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");
});

doneおよびに指定する引数は、ajax 呼び出しで指定されたおよびハンドラーfail用です。successerror

于 2013-07-25T17:49:39.553 に答える