weixin_33698043 2016-04-08 07:11 采纳率: 0%
浏览 33

AJAX JSON解析器错误PHP

Here is my code. I keep getting a json parser error. The ajax never goes into done. Help!

<input type="submit" class="button" name="insert" value="load"/>
<div id="wines">
    <!-- Javascript will print data in here when we have finished the page -->    
</div>
jQuery(document).ready(function() {
    var $ = jQuery;
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join('');

    $('.button').click(function(){ // This event fires when a button is clicked
        var button = $(this).val();
        $.ajax({ // ajax call starts
            url: baseUrl, // JQuery loads serverside.php
            data: 'action=' + $(this).val(), // Send value of the clicked button
            dataType: 'json', // Choosing a JSON datatype
        }).done(function(data) { // Variable data contains the data we get from serverside
            console.log("j");      
        }).fail(function(data,error) { 
            console.log(error);  
       })
    });
});
<?php
    $action = req('action');
    // Red wine table
    $red = array('Chianti', 'Barolo', 'Pinot Noir');
    $white = array('Chardonnay', 'Cava', 'Chablis');

    // Combine red and white tables into one multidimensional table

    $winetable = array(
      "red" => $red,
      "white" => $white,
    );

    // Finally depending on the button value, JSON encode our winetable and print it
    if ($action == "load") {
          print json_encode($red);
          header('Content-Type: application/json');
    }
?>

UPDATE: Error message shows this in the console:

"Initializing System Events for WUH..." common_admin.js:22
"["Chianti","Barolo","Pinot Noir"]
<input type="submit" class="button" name="insert" value="load"/>
<div id="wines">
  <!-- Javascript will print data in here when we have finished the page -->
</div>


<script type="text/javascript">
jQuery(document).ready(function() {

    var $ = jQuery;
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join('');

  $('.button').click(function(){ // This event fires when a button is clicked
    var button = $(this).val();
    $.ajax({ // ajax call starts
      url: baseUrl, // JQuery loads serverside.php
      data: 'action=' + $(this).val(), // Send value of the clicked button
      dataType: 'json', // Choosing a JSON datatype
    })
    .done(function(data) { // Variable data contains the data we get from serverside
      console.log("j");      
    })
    .fail(function(data,error) { 
      console.log(data.responseText+error);  
     })
  });
});
</script>parsererror"
  • 写回答

2条回答 默认 最新

  • weixin_33724046 2016-04-08 08:03
    关注

    You need to end-up your ajax response call with exit();

    if ($action == "load") {
              echo json_encode($red);
              exit(); 
    }
    

    and print will let you formatted output which not required, I think.

    so just echo also been working.

    评论
  • weixin_33743661 2016-04-08 08:08
    关注

    First, you should print your headers BEFORE sending any body, else you may encounter classical headers errors:

    Warning: Cannot modify header information - headers already sent by (...)

    For this you should move your headers() call BEFORE print json_encode(...), like this:

    // Finally depending on the button value, JSON encode our winetable and print it
    if ($action == "load") {
          header('Content-Type: application/json');
          print json_encode($red);
    }
    

    Next, as you might have other instructions runned after printing your JSON, you should, as @PranavBhaat said, add a die or exit statement at the end of your script so you're sure nothing else is outputted and the JSON is correctly parsed by your AJAX call.

    评论

报告相同问题?

悬赏问题

  • ¥15 【通信原理】为什么传信率不变?频带利用率为啥没有二倍
  • ¥15 CANOPEN SDO
  • ¥15 r语言数据集循环获取问题
  • ¥30 求佬们帮助,总是出bug,求佬们解决一下bug
  • ¥15 后端Java转换字符串传给前端,前端如何解析呢?
  • ¥15 psychopy(python为基础的)中引入cmd
  • ¥15 不知道怎么去做关于前端电子请柬
  • ¥15 Ubuntu22.04打开是tty界面。提示OOM
  • ¥15 存储过程或函数中的结果集类型变量如何使用。
  • ¥100 关于海信电视聚好看安装应用的问题