【问题标题】:"TypeError: c.slice is not a function" when trying to call a function within JQuery尝试在 JQuery 中调用函数时出现“TypeError:c.slice 不是函数”
【发布时间】:2016-04-02 22:44:13
【问题描述】:

我尝试在 JQuery ajax 调用中调用一个函数,但它一直显示“TypeError:c.slice 不是函数”,我不太明白为什么会发生这种情况?我感谢您的帮助!提前谢谢!

这是我的 AJAX 调用:

$.ajax({
     url: "my.php",
        method: "get",
        dataType: "json",
        data: requestJSON,
        success: function(jsondata){
         $.getJSON('my.php?callback=?', function (data) {

                // Create the chart
                $('#historicalcharts').highcharts('StockChart', {


                    rangeSelector : {
                        selected : 1
                    },

                    title : {
                        text : 'AAPL Stock Price'
                    },

                    series : [{
                        name : 'AAPL Stock Price',
                        data : data,
                        type : 'area',
                        threshold : null,
                        tooltip : {
                            valueDecimals : 2
                        },
                        fillColor : {
                            linearGradient : {
                                x1: 0,
                                y1: 0,
                                x2: 0,
                                y2: 1
                            },
                            stops : [
                                [0, Highcharts.getOptions().colors[0]],
                                [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
                            ]
                        }
                    }]
                });
            }); 
 });

}

我尝试模仿此链接中的函数,唯一的区别是它在每次调用时检索 JSON 数据,但我使用从我的 php 脚本中获取的 JSON 数据。 http://www.highcharts.com/stock/demo/area

这是我的 php 代码

<?php

if (isset($_GET['request'])) {  
    header("content-type: application/json"); 
    $retrievechartJSON = 'http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/json?parameters=' . $_GET['request'];
    $json = file_get_contents($retrievechartJSON);
    echo $_GET['callback']. '('. $json . ')';

?>

【问题讨论】:

  • 能看到php脚本吗?无法对您自己域之外的 JSON 文件使用 jQuery .getJSON() 函数。但是可以使用 JSONP。
  • 我会仔细检查解析的 JSON,以及我传递给第三方代码的任何其他内容,以确保结构是第三方代码所期望的。我的第一个猜测是,其中的某些代码期望某些东西是数组或字符串(这就是拥有 slice() 方法的人),但“某物”都不是。或者尝试在调试器中进入 highcharts 代码(Chrome/IE/FF 中的 F12)。跟踪每个函数,直到看到 c.slice 调用。或者 grep "c.slice" 的 highcharts 代码。
  • 这是一个 JS 堆栈跟踪:stackoverflow.com/a/635852/424129

标签: javascript jquery json ajax highcharts


【解决方案1】:

来自 HighCharts:

无法对您自己域之外的 JSON 文件使用 jQuery .getJSON() 函数。但是可以使用 JSONP。

您需要在 PHP 中添加一个回调,它会包装 JSON,然后返回该 JSON 对象:

示例

<?php
header("content-type: application/json"); 

$array = array(7,4,2,8,4,1,9,3,2,16,7,12);

echo $_GET['callback']. '('. json_encode($array) . ')';    

?>

通过这些更改,您可以像这样使用 jQuery 的 $.getJSON():

var url =  "http://url-to-your-remote-server/jsonp.php?callback=?";

$.getJSON(url,  function(data) {
    var yourJSONP = data;
    // render you chart here
});

以下是跨域数据的相关文档:

http://www.highcharts.com/docs/working-with-data/getting-data-across-domains-jsonp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2022-11-30
    • 2014-07-31
    • 2020-01-26
    相关资源
    最近更新 更多