Javascript 带有$.getJSON()的canvasJS的CORB错误

Javascript 带有$.getJSON()的canvasJS的CORB错误,javascript,jquery,canvasjs,Javascript,Jquery,Canvasjs,我在下面的脚本中遇到了一个CORB错误,我似乎无法找出原因 <script> var chart = null; var dataPoints = []; window.onload = function() { chart = new CanvasJS.Chart("chartContainer", { animationEnabled: true, theme: "light2", title: {

我在下面的脚本中遇到了一个CORB错误,我似乎无法找出原因

<script>

var chart = null;
var dataPoints = [];

window.onload = function() {

chart = new CanvasJS.Chart("chartContainer", {
    animationEnabled: true,
    theme: "light2",
    title: {
        text: "Daily Sales Data"
    },
    axisY: {
        title: "Sold For",
        titleFontSize: 24
    },
    data: [{
        type: "line",
        yValueFormatString: "$#,##0.00",
        dataPoints: dataPoints
    }]
});


$.getJSON("https://www.hostname.com/test/examples/01-overview/test.php?callback=?", callback);

}

function callback(data) {
    console.log(data.dps);
    for (var i = 0; i < data.dps.length; i++) {
        dataPoints.push({
            x: new Date(data.dps[i].date),
            y: data.dps[i].units
        });
    }
    chart.render();
}
</script>
我的PHP文件返回这个

{"callback":[
    {"dps":[
        {
            "date":"08\/18\/2020",
            "units":"1550.00"
         }, {...}
    ]}
 ]}

我不确定这是否是…的原因。

您在这里有三个基本问题:

  • 您没有覆盖默认的内容类型,因此PHP声称它正在输出HTML。当浏览器得到响应时,它会看到它声称是HTML,因此不会以JavaScript的形式执行它。(这是触发您看到的错误的原因,但修复它只会暴露其他两个错误)
  • 您的JSONP格式不正确(如您所怀疑的)。看起来您正在使用回调键创建一个关联数组,然后通过
    json\u encode
    运行整个过程,而不仅仅是对JSONP的json部分进行编码
  • 您使用的不是请求传递的回调名称,而是硬编码的
    callback
  • 好吧,如果你不把2020年使用JSONP计算在内的话,那就是三个问题


    执行JSONP的正确方法如下:

    <?php
        $data = do_stuff_to_get_the_data();
        if (!test_if_callback_is_safe($_GET['callback'])) {
           die();
        }
        header("Content-Type: application/javascript");
        echo $_GET('callback');
        echo "(";
        echo json_encode($data);
        echo ");";
        exit;
    
    
    
    <?php
        $data = do_stuff_to_get_the_data();
        if (!test_if_callback_is_safe($_GET['callback'])) {
           die();
        }
        header("Content-Type: application/javascript");
        echo $_GET('callback');
        echo "(";
        echo json_encode($data);
        echo ");";
        exit;
    
    <?php
        $data = do_stuff_to_get_the_data();
        header("Content-Type: application/json");
        header("Access-Control-Allow-Origin: *"); # Don't use a global wildcard if you can restrict this 
        echo json_encode($data); 
        exit;