【问题标题】:Getting JSON Error while calling multiple function调用多个函数时出现 JSON 错误
【发布时间】:2016-05-30 22:08:40
【问题描述】:

调用多个函数时出现 JSON 错误

错误 - Uncaught SyntaxError: Unexpected token ' in JSON at position 0

我在 jquery 中调用了多个函数,但它给出了错误,我尝试了很多方法,但错误得到了改变,但它不起作用我应该怎么做。

HTML

<div id="div1">
    <input type="submit"onclick='Function1()'>
    <input type="text" value="Text1" id="input1">
    <input type="text" value="Text2" id="input2">
</div>

<div id='div2'></div>

jQuery

function Function1(){
    var input1 =  $("#input1").val();
    var input2 =  $("#input2").val();
    var datajson = { "input1" : input1, "input2" : input2 };
    var data = "'"+JSON.stringify(datajson)+"'";
    Post_Funtion('testpost.php',data,'$("#div2").html(html);')
}

function Post_Funtion(URl,DATA,FUNCTION){

    var url = encodeURIComponent(URl);
    var data = JSON.parse(DATA);

    $.ajax({
        type: "POST",
        url: url,
        data: data,
        cache: false,
        success: function(html) {
            eval(FUNCTION);
        }
    });
}

【问题讨论】:

  • 删除JSON.stringify() 周围的"'"。单引号在 JSON 字符串中无效。 – 虽然,没有必要在之后立即 stringify() 只对 parse()。您可以将 Object 本身作为参数传递。
  • 您似乎认为只有字符串可以作为参数传递给函数。按原样传递data 和您的回调函数,无需将它们转换为字符串并在被调用者中解析。
  • 此外,JavaScript 中的函数可以像任何其他值一样使用和传递。因此,FUNCTION 可以是 actual functionPost_Function(..., function (html) { $("#div2").html(html); }) – 稍后使用 FUNCTION(html); 甚至 success: FUNCTION 调用,而不需要 eval()

标签: javascript jquery json


【解决方案1】:

您正尝试错误地JSON.stringify() 发布数据,然后转身将其解析回传递给 ajax 选项。

这整个步骤是不必要的。按原样传递对象,jQuery 将从那里处理它

function Function1(){
    var input1 =  $("#input1").val();
    var input2 =  $("#input2").val();
    var data = { "input1" : input1, "input2" : input2 };   
    Post_Funtion('testpost.php',data,'$("#div2").html(html);')
}


function Post_Funtion(URl,DATA,FUNCTION){    
    var url = encodeURIComponent(URl);       

    $.ajax({
       data: DATA,
       /* other options the same */

    ....
}

【讨论】:

    【解决方案2】:

    您正在尝试在如下所示的字符串上调用 JSON.parse

    '{"input1": input1, "input2": input2}'
    

    这不是格式良好的 JSON。 应该去掉外引号。试试这个代码:

    function Function1(){
        var input1 =  $("#input1").val();
        var input2 =  $("#input2").val();
        var datajson = { "input1" : input1, "input2" : input2 };
        var data = JSON.stringify(datajson) // Removed quotes from JSON
        Post_Funtion('testpost.php',data,'$("#div2").html(html);')
    }
    
    function Post_Funtion(URl,DATA,FUNCTION){
    
        var url = encodeURIComponent(URl);
        var data = JSON.parse(DATA);
    
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            cache: false,
            success: function(html) {
                eval(FUNCTION);
            }
        });
    }
    

    【讨论】:

      【解决方案3】:

      "'"+JSON.stringify(datajson)+"'"; - 删除引号

      var data = JSON.stringify(datajson);
      

      在这种情况下看不到对对象进行字符串化和解析的原因。请尝试以下操作:

      function Function1(){
      var input1 =  $("#input1").val();
      var input2 =  $("#input2").val();
      var data = { "input1" : input1, "input2" : input2 };
      
      function cb(response){
        $("#div2").html(response);
      }
      
      Post_Funtion('testpost.php',data, cb)
      }
      
      function Post_Funtion(URl,DATA,FUNCTION){
      
      var url = encodeURIComponent(URl);
      
      console.log(DATA);
      
      $.ajax({
          type: "POST",
          url: url,
          data: DATA,
          cache: false,
          success: FUNCTION
      });
      }
      

      PS 不要使用 eval,Why is using the JavaScript eval function a bad idea?

      【讨论】:

      • 我正在阅读有关 eval() 的信息,我有很多理由不使用此函数,但我有一个问题,即在 eval() 位置可以使用什么函数?
      • 我已经编辑了我的答案,看看函数 cb(response){..}
      猜你喜欢
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2020-08-08
      相关资源
      最近更新 更多