以下是工作表:
$(document).ready(function() {
//AJAX
$('form').on('submit', function(event) {
$.ajax({
data : {
user : $('#user').val(),
password : $('#password').val()
},
url: '/loginproc',
type: 'POST'
})
.done(function(data) {
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
});
event.preventDefault();
});
});
这在语法上是否正确?我是否需要在" .done"?
之前添加分号我正在使用Flask-WTForms CSRF保护,文档说明如下:
发送AJAX请求时,请向其添加X-CSRFToken标头。对于 例如,在JQuery中,您可以配置发送令牌的所有请求。
<script type="text/javascript">
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
}
});
</script>
$(document).ready(function() {
$('form').on('submit', function(event) {
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
});
$.ajax({
data : {
user : $('#user').val(),
password : $('#password').val()
},
url: '/loginproc',
type: 'POST'
})
.done(function(data) {
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
});
event.preventDefault();
});
});
这是远程正确吗?我确实得到了HTTP 200,但没有返回JSON数据。 JQuery / AJAX让我很困惑。
非常感谢帮助,感谢您的时间。
语法正确且功能正常 2. s
答案 0 :(得分:0)
我建议你移动event.preventDefault();在事件提交之后也使用console.log,这样你就可以检查变量是否包含你的想法,控制台在你的浏览器中只是google如何在你的浏览器中打开你的控制台,这样你就可以检查包含csrf_token的内容以及长度和数据在&#34;完成&#34;的回应中aaand添加.fail以便您可以处理有错误的服务器响应。
关于以下问题:&#39;我是否需要在&#34; .done&#34;?&#39;之前添加分号?答案是否定的,因为这称为方法链示例:$(&#34;#id&#34;)。show()。css(&#34; background&#34;,&#34; red&#34;) ;在示例im chaining show和css中,您可以一次链接这么多方法;)
$(document).ready(function() {
$('form').on('submit', function(event) {
event.preventDefault();
var csrf_token = "{{ csrf_token() }}";
console.log("csrf_token: ", csrf_token);
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
});
$.ajax({
data : {
user : $('#user').val(),
password : $('#password').val()
},
url: '/loginproc',
type: 'POST'
})
.done(function(data) {
console.log("done", data.length, data);
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
})
.fail(function( jqXHR, textStatus, errorThrown ) {
console.error("response with error:", jqXHR, textStatus, errorThrown);
});
});
});
&#13;