2012-11-20 55 views
3

在我寻求获取历史信息时,我尝试使用下面的代码。 Chrome调试器说Uncaught ReferenceError: $ is not defined。你能提出一个解决方案,我真的卡住了。我只需要这个工作在Chrome上,而我正在使用YQL和Yahoo API。jQuery美元符号未定义

这里是的jsfiddle http://jsfiddle.net/pCK5q/1/

<html> 
    <head>  
    <script type='text/javascript' src='http://www.google.com/jsapi'></script> 
    <script type='text/javascript'> 
     google.load('visualization', '1', {'packages':['annotatedtimeline']}); 
     google.setOnLoadCallback(drawChart); 
     function drawChart() { 
     var data = new google.visualization.DataTable(); 

     /* historical data code that breaks */ 
     var url = 'http://query.yahooapis.com/v1/public/yql'; 
     var startDate = '2012-01-01'; 
     var endDate = '2012-01-08'; 
     var jsonData = encodeURIComponent('select * from yahoo.finance.historicaldata where symbol in ("YHOO","AAPL","GOOG","MSFT") and startDate = "' + startDate + '" and endDate = "' + endDate + '"'); 
     $.getJSON(url, 'q=' + data + "&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json", callback); 

     data.addColumn('date', 'Date'); 
     data.addColumn('number', 'Sold Pencils'); 
     data.addColumn('string', 'title1'); 
     data.addColumn('string', 'text1'); 

     data.addColumn('number', 'Sold Pens'); 
     data.addColumn('string', 'title2'); 
     data.addColumn('string', 'text2');  // not on the fly 


     data.addRows([ 
      [new Date(2008, 1 ,1), 30000, undefined, undefined, 40645, undefined, undefined], 
      [new Date(2008, 1 ,2), 14045, undefined, undefined, 20374, undefined, undefined], 
      [new Date(2008, 1 ,3), 55022, undefined, undefined, 50766, undefined, undefined], 
      [new Date(2008, 1 ,4), 75284, undefined, undefined, 14334, 'Out of Stock','Ran out of stock on pens at 4pm'], 
      [new Date(2008, 1 ,5), 41476, 'Bought Pens','Bought 200k pens', 66467, undefined, undefined], 
      [new Date(2008, 1 ,6), 33322, undefined, undefined, 39463, undefined, undefined] 
     ]); 

     var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div')); 
     chart.draw(data, {displayAnnotations: true}); 
     } 
    </script> 
    </head> 

    <body> 
    // Note how you must specify the size of the container element explicitly! 
    <div id='chart_div' style='width: 700px; height: 240px;'></div> 

    </body> 
+4

你的jQuery参考在哪里? – SpYk3HH

+1

您是否正在导入jquery?或另一个使用$的库? – AJak

+3

从JsFiddle左边的下拉列表中选择'jQuery'。目前它是Mootools ... – ahren

回答

3

加入这一行:

google.load("jquery", "1.7.1"); 

正是在这一个你已经有了:

google.load('visualization', '1', {'packages':['annotatedtimeline']}); 

这将从您已经使用的Google jsapi中加载jQuery。这是关于您的代码的最佳解决方案。

+0

是的,我做到了,现在'回调'没有被定义... – bouncingHippo

+0

@bouncingHippo:好吧,错误清楚是不是?你在'$ .getJSON(...)'中使用它,但你永远不会定义它。我们不是一个调试服务...... –

+0

getJSON完成后会发生'callback',将其替换为'function(){alert(“done!”);}' –

4

你的脚本之前只需添加到jQuery代码的参考:

<script src="http://code.jquery.com/jquery.min.js"></script> 
1

尝试添加一个jQuery参考:

<head>  
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.8.3.min.js'></script> 
    <script type='text/javascript' src='http://www.google.com/jsapi'></script> 
    <script type='text/javascript'> 

OR(但我认为这不会工作,因为你在加载函数中调用jQuery,因此第一种方法是probab LY更好)

通过JSAPI谷歌添加加载它,你正在使用:

<head>  
    <script type='text/javascript' src='http://www.google.com/jsapi'></script> 
    <script type='text/javascript'> 
     google.load('visualization', '1', {'packages':['annotatedtimeline']}); 
     google.load("jquery", "1.8.3"); // note, you can also load jQueryUI this way, 

//在另一方面,不知道有多高一个版本的谷歌支持
请参阅Hosted Libs更多信息

+0

有趣的做法...它会阻止'糟糕的GET请求'吗? – bouncingHippo

+1

如果你先加载jQuery库,那么'$ .getJSON'只要参数设置正确就可以工作,虽然老实说,我还没有看过你的,现在呢...呃,我不知道那条数据线,我通常发送数据作为一个对象,而不是一个字符串,但尝试它! [看到这里的例子](http://api.jquery.com/jQuery.getJSON/#example-0) – SpYk3HH