带回调的JSONP和GET – 帮助纠正错误

这是我的JSONP文件:

<?php header('Content-type: application/javascript;'); header("access-control-allow-origin: *"); header("Access-Control-Allow-Methods: GET"); //db connection detils $host = "localhost"; $user = "test"; $password = "test"; $database = "myradiostation1"; //make connection $server = mysql_connect($host, $user, $password); $connection = mysql_select_db($database, $server); //query the database $query = mysql_query("SELECT *, DATE_FORMAT(start, '%d/%m/%Y %H:%i:%s') AS start, DATE_FORMAT(end, '%d/%m/%Y %H:%i:%s') AS end FROM radiostation1"); //loop through and return results for ($x = 0, $numrows = mysql_num_rows($query); $x  $row["id"], "startminutes" => $row["startminutes"], "start" => $row["start"], "endminutes" => $row["endminutes"],"end" => $row["end"],"mediumname" => $row["mediumname"], "longname" => $row["longname"], "description" => $row["description"],"short_id" => $row["short_id"],"promomessage" => $row["promomessage"],"email" => $row["email"],"phonenumber" => $row["phonenumber"],"textnumber" => $row["textnumber"],"textprefix" => $row["textprefix"],"showimage" => $row["showimage"],"longdescription" => $row["longdescription"],"facebooklink" => $row["facebooklink"],"otherlink" => $row["otherlink"],"websitelink" => $row["websitelink"],"keywords" => $row["keywords"] ); } //echo JSON to page $response = $_GET["callback"] . "(" . json_encode($shows) . ");"; echo $response; ?> 

确实有效,但是获得{“成功”:真实,“错误”:“”,“数据”:{“schedule”:在我的json_encode之前看到这个网站就在我身边。

但是,我不能让它在我的表中显示任何数据,尽管当我在http://www.myradio1.localhost/onairschedule.php查看时,它会在屏幕上生成代码。

实际代码存储在http://www.myradiostations.localhost/schedule.php中

并且回调函数工作正常,一个例子是http://www.myradiostations.localhost/schedule.php?callback =?&name = Northern + FM和http://www.myradiostations.localhost/schedule.php?callback =? &name = Southern + FM但我需要做些什么才能让它像这些示例一样进行更改: 此示例和此示例 ,如果不存在此类文件,则生成如下错误消息。

我已经到了一半,只需要修改我的代码一些建议!

基本上,我正在尝试做什么…让我的HTML表格中的JSONP工作,这会根据我页面上的javascript文件中的URL改变内容,这是:

 var doFades = true; var LocalhostRadioStations = { Schedule : {} }; $(document).ready(function(){ LocalhostRadioStations.Schedule.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] LocalhostRadioStations.Schedule.Show = function () { _s = null; _startDate = null; _endDate = null; this.days = LocalhostRadioStations.Schedule.days; _selector = ''; this.setShow = function(s) { this._s = s; this._startDate = new Date( parseInt(s.startminutes, 10) * 1000); this._endDate = new Date(parseInt(s.endminutes, 10) * 1000 ); }; this.getEndDate = function(){ return this._endDate; } this.getStartDate = function(){ return this._startDate; } this._getShowDay = function (){ return this.days[this.getStartDate().getDay()]; }; this._getShowUnitsTaken = function(){ // if it's the same day return this._getEndUnits() - this._getStartUnits(); }; this._getEndUnits = function(){ if(this.getEndDate().getHours() == 0) { //console.log(this._s.longname +' ends at midnight'); return 48; } return this.getEndDate().getMinutes() !== 0 ? (this.getEndDate().getHours() * 2) : (this.getEndDate().getHours() * 2); }; this._getStartUnits = function(){ if(this.getStartDate().getHours() == 0) { return 0; } return this.getStartDate().getMinutes() !== 0 ? (this.getStartDate().getHours() * 2) : (this.getStartDate().getHours() * 2); }; this.getCellPositions = function() { return { 'start' : this.getStartDate(), 'end' : this.getEndDate(), 'colIndex' : this.getStartDate().getDay() + 2, 'startUnits' : this._getStartUnits(), 'endUnits' : this._getEndUnits(), 'unitsTaken' : this._getShowUnitsTaken() } }; this.pad = function(number){ return number < 10 ? '0'+number : number; }; // return the table cell html. this.toHtml = function () { var d = new Date(); var units = this._getStartUnits(); var rowspan = this._getShowUnitsTaken(); var desc = this._s.description; var name = this._s.longname; var starttime = this.pad(this.getStartDate().getHours()) + ':' + this.pad(this.getStartDate().getMinutes()); var endtime = this.pad(this.getEndDate().getHours()) + ':' + this.pad(this.getEndDate().getMinutes()); var site = this._s.websitelink; var cls = this.isActive() ? 'current-program' : ''; var isToday = this.getStartDate().getDay() === d.getDay() ? 'active-program' : ''; var html = ''; html += '
'; html += '' + name + ''; html += '
'; if(doFades) { html += '
'; html += '' + desc + ''; html += '' + name + ''; html += '

' + desc + '

'; html += '' + starttime + ' - ' + endtime +''; html += '
'; } html += ''; return html; }; this.setTableSelector = function(sel){ this._selector = sel; }; // check if we should add the active class. this.isActive = function(){ var t = new Date(); return t >= this.getStartDate() && t <= this.getEndDate(); }; }; LocalhostRadioStations.Schedule.ScheduleGen = function(){ return { insertShow : function(show) { var p = show.getCellPositions(); $('tr#units-' + p.startUnits).append(show.toHtml()); }, init : function (stationName){ var self = this; // load the schedule. $.getJSON('http://www.myradiostations.localhost/schedule.php?callback=?&name=', { name: 'Northern FM' }, function(json){ // loop each show and append to our giant table. // this is well sick. if(json.success === false) { $('.content-inner table').remove(); $('
errors
').appendTo('.content-inner'); } else { var currentDay = ''; var day = 0; // highlight the current time.. var d = new Date(); var weekStart = new Date(); weekStart.setDate(d.getDate()-6-(d.getDay()||7)); $.each(json.data.schedule, function(i, broadcast){ var dStart = new Date( parseInt(broadcast.startminutes, 10) * 1000); var dEnd = new Date(parseInt(broadcast.endminutes, 10) * 1000 ); /*// transform to a show object defined above, if the show spans 2 days we create two show objects. // IF THE SHOW STARTS/ENDS AT MIDNIGHT, DON'T SPLIT IT. if(dStart.getHours() !== 0 && dEnd.getHours() !== 0 && dStart.getDate() != dEnd.getDate()) { var showOne = new LocalhostRadioStations.Schedule.Show(); showOne.setShow(broadcast); // set to midnight showOne.getEndDate().setHours(0); showOne.getEndDate().setMinutes(dStart.getMinutes()); // append first half of show. self.insertShow(showOne); // handle second half. var showTwo = new LocalhostRadioStations.Schedule.Show(); showTwo.setShow(broadcast); showTwo.getStartDate().setDate(showTwo.getStartDate().getDate() + 1); showTwo.getStartDate().setHours(0); showTwo.getStartDate().setMinutes(dEnd.getMinutes()); //console.log('2nd Half Start: ' + showTwo.getStartDate()); //console.log('2nd Half End: ' + showTwo.getEndDate()); self.insertShow(showTwo); } else {*/ var show = new LocalhostRadioStations.Schedule.Show(); show.setShow(broadcast); show.setTableSelector('table#schedule'); // add the show to the table. Thankfully the order these come out the API means they get added // in the right place. So don't change the schedule builder code! self.insertShow(show); //} }); var days = LocalhostRadioStations.Schedule.days; // apply the current day / time classes $('th:contains('+ days[d.getDay()]+')').addClass('active'); $('td.time').each(function(i, cell){ // get the value, convert to int. var hours = $(cell).html().split(':')[0]; // compare the hours with now, add class if matched. if(parseInt(hours, 10) === d.getHours()) { $(cell).addClass('current_time'); } }); } if(doFades) { // apply events to show info fade in / out. $('td.schedule-show').hover(function(){ $(this).find('.schedule_details').fadeIn('fast'); }, function(){ $(this).find('.schedule_details').fadeOut('fast'); }); } }); } }; }(); LocalhostRadioStations.Schedule.ScheduleGen.init(twittiName); });

它应该根据JSONP更改计划,但我该怎么做才能修复它?

基本上,我正在尝试创建自己的本地主机版本的http://radioplayer.bauerradio.com/schedule.php?callback=&name=Rock+FM及其JSON / JSONP(我不确定原始版本的类型,但是再次该网站是实验性的并且在.localhost域上)用于测试目的,其中内容来自数据库,并根据站名进行更改,例如http://radioplayer.bauerradio.com/schedule.php?callback= &name = Metro + Radio和http://radioplayer.bauerradio.com/schedule.php?callback=&name=Forth+One等。

编辑:我的页面的完整代码可以在http://pastebin.com/ENhR6Q9j上看到

我不确定到底缺少什么,但是从你到目前为止的代码中,我做了一个jsfiddle:

演示

我修改了一些东西以使其工作(主要是追加东西),因为我不知道你的原始HTML文件。 但我也根据你的意思做了一些改变。 首先,我将$.getJSON调用修改$.getJSON

 $.getJSON('http://radioplayer.bauerradio.com/schedule.php?callback=?', { name: stationName //stationName is from the argument passed }, function(json){...}) 

哪个应根据传递的内容返回电台

 LocalhostRadioStations.Schedule.ScheduleGen.init(twittiName); 

为了使它更有趣,我还添加了一些从url读取的代码。 在这种情况下,如果你转到带有domain.htm/page?Northern FM它将读取后的文本? 并把它放在twittiName

 var twittiName="Rock FM"; //default station if(window.location.search){ twittiName=window.location.search.substring(1) //or window.location.hash } 

试图寻找可能在您的公共网站上的其他电台,但到目前为止我只能测试“?Rock + FM”。 但这是否意味着您可以显示错误,您的代码可以按原样处理。

  • ?Rock+FM
  • ?Random Name

所以看起来你的代码大部分都有用,但如果我遗漏了什