JavaScript:基于用户响应的 JSON 条件



这让我发疯了。

用户单击按钮进行保留。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.resultnumber['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

最新更新