JSON输入的意外结束... SO想要更多信息

时间:2016-08-29 00:40:26

标签: json ajax

我很困惑......这有什么问题? 无法在不改变标题的情况下发帖......我真的不知道出了什么问题

$(document).ready(function(){
    $("#fmob").click(function(){
        var mobname = $(this).attr("data-value");
        console.log(mobname);
        $.ajax({
            type: "POST",
            url: "/system/mobproc.php",
            data: {mobname: 1},
            dataType: "json",
            success: function(data){
                if(data.response === true){
                    $("#fresponse").html(data.result);  
                }else{
                    $("#fresponse").html(data.result);
                }
            },
            error:function(jqXHR,textStatus,errorThrown ){
              alert('Exception:'+errorThrown );
           }
        });
    });
});

我在这里查看了Unexpected end of JSON input from an ajax call

但不知怎的不是我的预期......怎么了?感谢。

3 个答案:

答案 0 :(得分:2)

尝试这种方法:

@multiplication_table

请注意上面带注释的行。

在这种方法中,我们设置一个数据对象并使用“mobname”变量的值指定属性,而不是定义内联属性。这允许我们使用变量的动态值作为属性的键。

答案 1 :(得分:-1)

我猜问题就在于:*

由于你不能将变量名称指定为像这样的对象属性......它应该在这样的方括号内data: {mobname: 1}

编辑:如果您不使用data: {[mobname]: 1}支持的浏览器,您甚至可以 ES 2015

编辑1 如果您想将json数据作为字符串发送并在php端转换,您只需执行data: JSON.parse('{"'+mobname+'":1}')

这可能会导致您的ajax调用失败,并且可能不会像您期望的那样返回JSON(使用行data: '{"'+mobname+'":1}');

因此,删除dattype:JSON也可以帮助您显示出错的地方

答案 2 :(得分:-1)

通过在两者键和值中使用双引号来区分JSON对象与标准JavaScript对象的区别 - 除非两者都是整数。

It is explained in the relevant W3Schools site.

因此,在您的AJAX请求中,您必须发送格式正确的JSON对象:

$.ajax({
        type: "POST",
        url: "/system/mobproc.php",
        data: {"mobname": 1},              //here's the change
        dataType: "json",
        /* rest of the code */

您当然可以传递一个变量:

var JSON_obj = {"mobname": 1, "othermob": 2, /*rest of the JSON */ };

$.ajax({
        type: "POST",
        url: "/system/mobproc.php",
        data: JSON_obj,              //here's the change
        dataType: "json",
        /* rest of the code */

同样,使用格式正确的JSON对象(如果它在另一个文件中,则使用正确包含的JS脚本),这应该可行。