Я разместил этот вопрос AJAX URL update, так как я думал, что проблема с моим кодом была в AJAX, но я думаю, что это может быть проблемой с HighStocks.HighStocks не обновляет URL
У меня есть внешний .js файл с этими функциями:
//uses AJAX call to retrieve data and then creates the chart with the data
function createChart(ticker) {
$.ajax({
type: 'post',
url: 'http://...' + ticker + '....com',
success: function (data, status) {
//chart is rendered in here
}
//gets the user inputted ticker symbol from a HTML input box
// and passes to chart function
function getTicker() {
var ticker = document.getElementById('userInput').value;
createChart(ticker);
}
Мой HTML-файл только имеет простую форму с полем ввода и кнопку, которая при нажатии вызывает функцию getTicker. По какой-то причине диаграмма не создается, и вызов AJAX не работает.
Возможно, это что-то с HighStocks? Мы ценим любые предложения.
ОБНОВЛЕНИЕ Благодарим вас за предложения, я попытался использовать JSONP, но диаграмма по-прежнему не загружается. Кто-нибудь может понять, что я делаю неправильно?
var closePrices = new Array();
var dateArray = new Array();
var timeStampArray = new Array();
var timeClose = new Array();
function jsonCallback(data, ticker) {
console.log(data);
//Put all the closing prices into an array and convert to floats
for(var i=0; i < data.query.results.quote.length; i++)
{
closePrices[i] = parseFloat(data.query.results.quote[i].Close);
}
//displays the values in the closePrices array
console.log(closePrices);
//Put all the dates into an array
for(var i=0; i < data.query.results.quote.length; i++)
{
dateArray[i] = data.query.results.quote[i].date;
}
//Convert all the dates into JS Timestamps
for(var i=0; i < dateArray.length; i++)
{
timeStampArray[i] = new Date(dateArray[i]).getTime();
}
for(var i=0; i<data.query.results.quote.length; i++)
{
timeClose.push([timeStampArray[i], closePrices[i]]);
}
timeClose = timeClose.reverse();
console.log (timeClose);
//displays the dateArray
console.log(dateArray);
console.log(timeStampArray);
// Create the chart
$('#container').highcharts('StockChart', {
rangeSelector : {
selected : 1
},
title : {
text : ticker + ' Stock Price'
},
series : [{
name : ticker,
data: timeClose,
tooltip: {
valueDecimals: 2
}
}]
});
}
function createChart() {
var url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22' + ticker +'%22%20and%20startDate%20%3D%20%222013-01-01%22%20and%20endDate%20%3D%20%222013-02-25%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=?';
//Ajax call retrieves the data from Yahoo! Finance API
$.ajax(url, {
dataType: "jsonp",
success: function(data, status){
console.log(status);
jsonCallback(data, ticker);
},
error: function(jqXHR, status, error) {
console.log('Error: ' + error);
}
});
}
//Function to get ticker symbol from input box.
function getTicker() {
var ticker = document.getElementById('userInput').value;
createChart(ticker);
}
В каком формате данные, которые вы пытаетесь отступить? Похоже, что это может быть проблемой с политикой одного и того же происхождения: http://en.wikipedia.org/wiki/Same_origin_policy - то, что часто препятствует работе ajax от работы, если вы не используете JSONP или SCRIPT в качестве формата для данные. –
Im получение данных JSON, означает ли это, что я не могу изменить URL-адрес AJAX для получения разных данных компании? Это раздражает. – James
Вам нужно использовать JSONPin в этом случае. –