【问题标题】:JavaScript: JSON Conditional based on user responseJavaScript:基于用户响应的条件 JSON
【发布时间】:2017-08-24 10:02:44
【问题描述】:

这快把我逼疯了。

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

我已经尝试了所有可能的迭代,但它不起作用。即使 console.log 说 value == 1,JS 也不会承认 value == 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,甚至创建一个与字典相同的 var。救命!

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    你创造

    data = {'result': result} 
    

    然后解析它

    var number = JSON.parse(data);
    

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

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

    您还在响应中返回字符串,您的 javascript 正在检查整数值

    【讨论】:

    • 谢谢!我弄清楚了令人困惑的地方-条件有效,但我也从“else”收到了console.log。知道为什么吗?
    • 你没有使用“else if”试试。你的最后一个 if 是检查 3,如果它是 1 或 2,它仍然会进入 else,考虑使用 switch 语句。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      1) 首先使用typeof() 运算符检查您的解析号码。

      console.log(typeof(number));
      

      2) 如果是数组,那么试试。

      number[0] == 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-07
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        • 2018-09-18
        相关资源
        最近更新 更多