2017-08-24 50 views
0

这让我疯狂。JavaScript:JSON基于用户响应的条件

用户点击一个按钮来保留它。 AJAX根据预订是否成功返回一个值:预订成功,清除旧的预订,或因为某人已经预订而被阻止。该值返回到视图,并且该按钮根据用户的选择而改变。

我试过每一个可能的迭代,它不会工作。即使console.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.Stringify,甚至创建一个与字典相同的变量。帮帮我!

回答

2

创建

data = {'result': result} 

,然后分析它

var number = JSON.parse(data); 

这意味着数据包含{"result": yourvalue}

您可以通过number.resultnumber['result']

它存取权限

此外,你正在返回字符串在你的JavaScript检查整数值的回应

+0

谢谢!我想出了什么令人困惑 - 条件工作,但我也从“其他”接收console.log。任何想法为什么? –

+0

你没有使用“else if”尝试。如果最后一个if检查是3,如果它是1或2,它仍然会在else中,请考虑使用switch语句。 – Mike

0

使用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) { 
0

1)首先检查您的解析数typeof()运算符。

console.log(typeof(number)); 

2)如果它是一个数组,然后尝试。

number[0] == 1