这让我发疯了。
用户单击按钮进行保留。AJAX 根据预留是否成功返回一个值:预留成功、清除旧预留或因有人已预订而阻止。该值将返回到视图,按钮将根据用户的选择进行更改。
我已经尝试了所有可能的迭代,但它不起作用。即使控制台.log说值 == 1,JS 也不会承认该值 == 1,并且每次都会发送到我的错误消息。
views.py
@ensure_csrf_cookie
def reserve(request):
if request.is_ajax():
pk = request.POST['pk']
slot = Event.objects.get(pk=pk)
user = request.user
if slot.is_reserved == True:
if user == slot.teacher:
slot.is_reserved = False
slot.teacher = None
slot.save()
result = "1"
else:
result = "3"
else:
slot.is_reserved = True
slot.teacher = user
slot.save()
result = "2"
data = {'result': result}
return HttpResponse(json.dumps(data, cls=DjangoJSONEncoder))
//main.js
$( document ).ready(function() {
var count = 0; //to reload the page
console.log( 'ready!' + count ); //Sanity check
$( 'button' ).click(function() {
var pk = this.id
var user = $( 'button' ).attr("user")
$.ajax({
url: "/reserve/",
type: "POST", //Send the info to view
data: { pk : pk},
success: function(data) {
var number = JSON.parse(data);
if (number == 1 ) {
$(this).toggleClass( "free reserved" );
$.toast({
heading: "Reservation Clear!",
icon: 'success',
stack: 4,
hideAfter: 2000,
bgColor: '#003366'
});
}
if (number == 2) {
$(this).toggleClass( "free reserved" );
$("div.tchr").html(user); //Send user info to button, reverts on refresh
$.toast({
heading: "Reservation Complete!",
icon: 'success',
stack: 4,
hideAfter: 2000
});
}
if (number == 3) {
alert("Sorry! This has already been reserved (maybe refresh your browser)")
}
else {
console.log("Something is wrong. Something is wrong. Something is wrong")
}
count++;
console.log(count)
if (count > 3) {
location.reload();
};
}
}); // End AJAX
});
});
我试过在两端都使用引号,JSON。字符串化,甚至创建一个与字典相同的变量。帮助!
你创建
data = {'result': result}
然后解析它
var number = JSON.parse(data);
这意味着数据包含{"result": yourvalue}
您可以通过number.result
或number['result']
访问它
此外,您在 javascript 检查整数值的响应中返回字符串
使用typeof()
查找返回的数据类型,稍后添加条件检查。
var number = JSON.parse(data);
console.log(typeof(number)) // check this what is the output and add the condition based on it
if (number == 1 ) {
1( 首先使用运算符检查解析typeof()
的数字。
console.log(typeof(number));
2(如果它是一个数组,请尝试。
number[0] == 1