Ajax 未捕获类型错误:无法读取属性';流行音乐';在更改HTMLSelectElement.onchange时未定义的
我正在尝试创建一个函数,允许我根据在下拉菜单上选择的内容更改chart.js数据。关于chart.js x django rest框架的教程还不多,我根据在线文章中的部分和片段将它们拼凑起来 这个想法是在AJAX函数中调用一个函数,这样我就能够更改进入模型本身的数据数组,但是我在这样做时遇到了一些困难 这是我的api类:Ajax 未捕获类型错误:无法读取属性';流行音乐';在更改HTMLSelectElement.onchange时未定义的,ajax,django-rest-framework,chart.js,Ajax,Django Rest Framework,Chart.js,我正在尝试创建一个函数,允许我根据在下拉菜单上选择的内容更改chart.js数据。关于chart.js x django rest框架的教程还不多,我根据在线文章中的部分和片段将它们拼凑起来 这个想法是在AJAX函数中调用一个函数,这样我就能够更改进入模型本身的数据数组,但是我在这样做时遇到了一些困难 这是我的api类: class ChartData(APIView): authentication_classes = [SessionAuthentication, BasicAuthenti
class ChartData(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
current_user = request.user
print(current_user.id)
sales_rev_data = Sales_project.objects.values_list('sales_project_est_rev').filter(sales_project_status = 'p4').filter(sales_extras = current_user.id)
sales_project_closing_date_data = Sales_project.objects.values_list('sales_project_closing_date').filter(sales_project_status = 'p4')
conversion_data = Sales_project.objects.all().filter(sales_project_status = 'p4').filter(sales_extras = current_user.id).count()
notconverted_data = Sales_project.objects.all().filter(sales_extras = current_user.id).count() - conversion_data
cost_data_per_unit = Sales_project.objects.values_list('material_costs').filter(sales_project_status = 'p4').filter(sales_extras = current_user.id)
moq_data = Customer_requirement.objects.values_list('moq').filter(sales_project__sales_project_status__contains= 'p4')
cost_data = np.array(list(moq_data)) * np.array(list(cost_data_per_unit))
profit_data = np.array(list(sales_rev_data))- cost_data
data = {
"sales_rev": sales_rev_data,
"sales_time_axis": sales_project_closing_date_data,
"conversion_label": ['Converted','Not Converted'],
"conversion_data": [conversion_data,notconverted_data],
"profit_data_per_project": profit_data
}
return Response(data)
这是api的终点:
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"sales_rev": [
[
100000
],
[
125000
],
[
123000
]
],
"sales_time_axis": [
[
"2019-12-29T10:42:25Z"
],
[
"2019-12-23T03:13:03Z"
],
[
"2019-12-23T02:50:51Z"
]
],
"conversion_label": [
"Converted",
"Not Converted"
],
"conversion_data": [
3,
1
],
"profit_data_per_project": [
[],
[],
[]
]
}
这是我的ajax函数:
endpoint = 'api/chart/data'
$.ajax({
type: "GET",
url: endpoint,
success: function(data){
console.log(data)
sales_time = data.sales_time_axis
sales_rev = data.sales_rev
conversion_label = data.conversion_label
conversion_data= data.conversion_data
profit_data_per_project= data.profit_data_per_project
createChart()
change(sales_rev)
},
error: function(error_data){
console.log('error')
console.log(error_data)
}
})
以下是更改函数定义:
function change(data){
var val = "Hi";
console.log(val)
data.pop()
console.log(data)
}
这是我的HTML:
<div class="card-body" id="card_body">
<select class="text_select" id="chart-select" onchange="change()" name="select">
<option value="All">All Time</option>
<option value="3" id = 'hello'>Last 3 Months</option>
<option value="6">Last 6 Months</option>
<option value="12">Last Year</option>
<option value="24">Last 2 Years</option>
</select>
<canvas id="myChart"></canvas>
</div>
我将非常感谢任何人的意见
无法读取未定义的属性“pop”
表示行data.pop()
,数据是未定义的
,表示未定义的.pop()
。你能在你的success
回调中console.log(data)
并尝试查看传递给change(sales\u rev)
function的是什么吗好的,change()
不知何故被调用了empty
数据,我能看到onchange=“change()”
在html
代码共享中。无法读取未定义的属性“pop”
表示,行data.pop()
,数据是未定义的
,表示未定义的.pop()
。你能在你的success
回调中console.log(data)
并尝试查看传递给change(sales\u rev)
function的是什么吗好的,change()
不知何故被调用了空的数据,我能在html
代码共享中看到onchange=“change()”
。
{sales_rev: Array(3), sales_time_axis: Array(3), conversion_label: Array(2), conversion_data: Array(2), profit_data_per_project: Array(3)}
(index):166 Hi
(index):168 (2) [Array(1), Array(1), _chartjs: {…}, push: ƒ, pop: ƒ, shift: ƒ, splice: ƒ, …]
favicon.ico:1 GET http://127.0.0.1:8000/favicon.ico 404 (Not Found)
(index):166 Hi
(index):167 Uncaught TypeError: Cannot read property 'pop' of undefined
at change ((index):167)
at HTMLSelectElement.onchange ((index):80)
change @ (index):167
onchange @ (index):80