我尝试发送回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");
});
});
});
我做错了什么???
拜托,请救我一段时间:) 先谢谢!
答案 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");
});
您为done
和fail
提供的参数适用于ajax调用中给出的success
和error
处理程序。