带回调的 JSONP 和 GET - 需要帮助纠正错误

2024-02-12

这是我的 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 < $numrows; $x++) {
    $row = mysql_fetch_assoc($query);

    $shows[$x] = array("id" => $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; 

?>

It does工作,在一定程度上,但得到 {"success":true,"error":"","data":{"schedule": 如在在我的 json_encode 之前就是我所在的位置。

但是,我无法让它在我的表中显示任何数据,尽管当我在以下位置查看它时它确实会在屏幕上生成代码http://www.myradio1.localhost/onairschedule.php http://www.myradio1.localhost/onairschedule.php.

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

并且回调函数工作正常,一个例子是 and 但我需要做什么才能使其改变,如这些示例所示: and ,并生成错误消息,例如如果不存在这样的文件。

我已经完成一半了,只需要一些关于修复我的代码的建议!

基本上,我想要做的...让 JSONP 在我的 HTML 表中工作,这将根据页面上的 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 = '<td class="schedule-show ' + isToday + ' ' + cls + '" rowspan="' + rowspan + '" data-start="' + this.getStartDate() + '" data-end="' + this.getEndDate() + '">';
        html += '<div>';
        html += '<a href="' + site + '" title="' + desc + '">' + name + '</a>';
        html += '</div>';
        if(doFades)
        {
          html += '<div class="schedule_details clearfix" style="display:none;">';
          html += '<img width="105px" height="105px" alt="' + desc + '" src="' + this._s.showimage + '">';
          html += '<strong>' + name + '</strong>';
          html += '<p>' + desc + '</p>';
          html += '<span>' + starttime + ' - ' + endtime +'</span>';
          html += '</div>';
        }
        html += '</td>';      

      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();

            $('<div>errors</div>').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 更改时间表,但我该怎么做才能修复它?

基本上,我正在尝试制作自己的本地主机版本及其 JSON / JSONP (我不确定原始的到底是什么类型,但该网站还是实验性的并且位于 .localhost 域上)用于测试目的,其中内容从数据库中获取,并根据站名称进行更改,例如 and etc.

编辑:我的页面的完整代码可以在以下位置查看http://pastebin.com/ENhR6Q9j http://pastebin.com/ENhR6Q9j


我不确定到底缺少什么,但是根据您到目前为止提供的代码,我制作了一个 jsfiddle:

Demo http://jsfiddle.net/mfirdaus/8G2kJ/

我修改了一些东西以使其工作(主要是附加内容),因为我不知道你的原始 HTML 文件。但我也根据你说的你想要的做了一些改变。首先我修改了你的$.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 http://jsfiddle.net/mfirdaus/8G2kJ/show/?Rock%20FM
  • ?Random Name http://jsfiddle.net/mfirdaus/8G2kJ/show/?Random%20Name

所以看来你的代码大部分都能工作,但如果我错过了任何东西,请发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带回调的 JSONP 和 GET - 需要帮助纠正错误 的相关文章

  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 如何重新加载 jquery dropkick 对象

    我使用一个简单的选择列表和 jquery dropkick 库来使其美观 现在我想在更改相应的选择元素后更改 dropkick 内容 出现了一个新选项 但只需调用 select dropkick 不起作用 而且好像不支持 只需从头开始重建那
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • JQuery 验证在 IE8 中不起作用

    我使用 JQuery 验证脚本来验证 HTML 表单 这在 Firefox 中完美运行 但在 IE8 中不起作用 我认为冒号 或分号 有问题 但我无法抓住它 jQuery validator addMethod selectNone fun
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何在jquery中获取保存时间和当前时间的差异?

    我想在 javascript 或 jquery 中获取保存时间和当前时间之间的时差 我节省的时间看起来像Sun Oct 24 15 55 56 GMT 05 30 2010 java中的日期格式代码如下 String newDate 201
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di

随机推荐

  • 如何结合callLater和addCallback?

    实在是太崩溃了 希望大家怜悯我 reactor callLater 0 myFunction parameter1 addCallback reactor stop reactor run myFunction返回一个延迟的 我希望我想做什
  • 如何自动弹出键盘?

    我有编辑文本字段 我必须在其中输入密码 但我必须推送此字段 如何在不触摸编辑文本的情况下自动弹出键盘 有一个编辑文本 xml 字段
  • Java:类继承自身

    我知道这是毫无意义的 我只是觉得这很有趣 我想更多地了解当您创建一个继承自身的类时会发生什么 从而导致堆栈溢出崩溃 令人惊奇的是 Java 允许您首先进行这样的构造 我只是猜测 但是 JVM 是否将自身置于无限循环中 试图在实例化该类之前解
  • 如何列出 Google Cloud Platform 项目的所有启用的 API 服务

    我们管理着几十个 GCP 项目 但我一直不知道如何在网站上列出每个项目所有启用的 API 服务 有一种方法可以通过 Cloud Shell 运行控制台命令来完成此操作 gcloud services list 如果我访问https cons
  • 实体框架和 Oracle Db 中的 CLOB 字符串

    我有这个模型 public class Teacher public int TeacherID get set public string Name get set public string Surname get set 当模型首次运
  • .htaccess 用于附加 https://www [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经搜索了很长一段时间来获得解决方案或对我的查询的提示 但没有找到任何有价值的东西 基本上我的应用程序是受 SSL 保护的 我想要的只是 如果用户尝
  • 具有可排序功能的 jQuery 树视图

    我只是想知道是否有人知道有什么方法可以让 bassistance 树视图插件与 jQuery UI 的可排序插件一起使用 特别是能够将元素从嵌套 ul 拖放到父 ul 或反之亦然 另外两个要求是我能够防止拖放到指定元素上 例如 class
  • 为 Ruby Resolv.getaddress(ip) 设置超时

    我找不到在 Ruby 文档中 http ruby doc org stdlib 1 9 3 libdoc resolv rdoc Resolv html关于如何使用来自 Ruby std 库的 Resolv 类的类方法 getaddress
  • tv4.validate 始终返回 true。即使我的模式无效,即: var == "dummy"

    tv4 validate 将始终返回 true 无论架构是有效的 JSON 还是只是虚拟字符串 我浏览 stackoverflow 查找相关问题 但 banUnknownProperties 对我没有帮助 正如我所说 我什至尝试将架构变量更
  • 使用cmake编译并包含调试信息

    cmake版本2 8 5 我正在尝试使用 cmake 编译我的项目 但是 当我编译时 我认为我没有包含调试cflags 即 ggdb D DEBUG 当我尝试调试时 没有调试信息 CMakeLists txt 文件是否有任何问题 我有 3
  • ASP.NET MVC 控制器单元测试 - UrlHelper 扩展问题

    尝试做一些控制器在我的 ASP NET MVC 3 Web 应用程序中进行单元测试 我的测试是这样的 TestMethod public void Ensure CreateReviewHttpPostAction RedirectsApp
  • 如何限制WCF服务的请求执行时间?

    WCF 配置中是否有某些内容定义了在服务端执行请求的超时 例如 WCF 服务将在一段时间后停止执行请求 我有一项服务 可以根据客户的输入进行一些工作 在某些情况下 此类调用可能会花费太多时间 我想限制服务端此类请求的执行时间 而不是使用 S
  • 如何使用笔记本中的某些命令在 databricks 集群上安装库?

    实际上 我想在我的 Azure databricks 集群上安装一个库 但我无法使用 UI 方法 因为每次我的集群发生变化并且在转换过程中我无法使用 UI 将库添加到其中 是否有任何 databricks 实用程序命令可以执行此操作 CHE
  • 是否可以在 Vim 中交互式删除匹配的搜索模式?

    我想在 Vim 中寻找一个短语 找到后 我想删除该短语的出现 循环遍历所有事件的最简单方法是什么 通过n 并一一删除匹配项 我不想一次删除所有匹配项 Note 我知道我可以删除一定数量的字符或一定数量的单词 但我想专门删除搜索的匹配项 这可
  • Node.js 中的 cURL 等效项?

    我希望使用来自 Node js 的 HTTP 请求的信息 即调用远程 Web 服务并将响应回显给客户端 在 PHP 中我会使用 cURL 来做到这一点 Node 的最佳实践是什么 有关完整示例 请参阅 HTTP 模块的文档 https no
  • 在所有子图上显示 x 刻度和唯一的 y 标签

    我正在绘制共享相同 x 轴的两个子图 但是当我绘制时 我只看到第二个子图上的 x 轴刻度 如何使 x 刻度在两个子图上都可见 另外 我想为两个子图设置 y 标签 但只有第二个子图可见 您能帮忙在两个子图上显示 y 标签吗 下面是我的可重现代
  • Python Flask 跨站点 HTTP POST - 不适用于特定允许的来源

    我正在尝试让 Flask 正确处理跨站点脚本 我从这里获取了跨域装饰器片段 http flask pocoo org snippets 56 http flask pocoo org snippets 56 在下面的代码中 我放置了装饰器片
  • Python xlib 更改光标

    如何使用 Xlib 在 python 应用程序中设置根窗口 或任何其他窗口 的光标 我有一个实例display and window 根窗口 使用 C 绑定 我可以用X定义光标 https tronche com gui x xlib wi
  • 获取并发中异常的原始行号。futures

    使用并发 futures 的示例 2 7 的向后移植 import concurrent futures line 01 def f x line 02 return x x line 03 data 1 2 3 None 5 line 0
  • 带回调的 JSONP 和 GET - 需要帮助纠正错误

    这是我的 JSONP 文件