我正在尝试将 DataTables 与我工作的虚拟学习环境一起使用。
介绍
正如我在之前的问题中提到的,我们的 VLE 使用Netvibes 通用小部件 API,它允许我编写 JavaScript 文件,这些文件既可以与 VLE 通信(用于从 VLE 的用户帐户中检索信息,例如姓名和时间表),也可以通过代理,一个托管 PHP 文件和数据库的内部网络网络服务器。
Netvibes UWA AJAX 调用
因此,例如,我可以使用此代码来访问我的 PHP 脚本:
UWA.Data.getJson(List.URL + '?cmd=getObservations&filters=' + JSONdata, List.init);
两个简单的参数——url、callback。
或者,我可以使用完整的Data.request
调用:
UWA.Data.request(
BookReviewInput.URL,
{
method: 'post',
proxy: 'ajax',
type: 'json',
cache: 3600,
parameters: obj,
onComplete: BookReviewInput.process
}
这些脚本是在我们的 VLE 上编写的,它有一个内部网络 URL,http://vle.curriculum.local
然后是一个外部 URL http://vle.ourschoolwebsite.com
。
它们与只能从本地访问的脚本进行通信,URL 为http://php.curriculum.local
.
数据表 AJAX 调用
我现在正试图让 DataTables 从我的内部定位脚本中加载信息,我希望它能够完全完成这一切(即分页和所有事情),因为我们有很多数据需要很长时间才能加载满的。
首先,我通过手动从他们的网站上复制一些示例表来确保 DataTables 以 UWA 格式工作。具有最少.dataTable()
功能的手动 HTML 表格可以正常工作。
然后我尝试编写以下代码,但不起作用:
<head>
<script type="text/javascript">
//<![CDATA[
widget.onLoad = function(){
$('#example').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "http://php.curriculum.local/cmd.php"
} );
}
//]]>
</script>
</head>
<body>
<div id="wrapper">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> </table>
</div>
</body>
我从运行这个脚本中得到的控制台错误信息非常少,可能是因为 UWA 包装器:
当我点击 186642.js..
服务器端输出
我知道问题不在于服务器端输出,因为我已经在http://pro.jsonlint.com上相应地验证了它:
{
"sEcho": 0,
"iTotalRecords": "5",
"iTotalDisplayRecords": "5",
"aaData": [
[
"2012-10-24",
"35010",
"34966",
"10",
"43",
"2",
"2",
"2"
],
[
"2012-11-14",
"34956",
"35010",
"10",
"38",
"2",
"2",
"2"
],
[
"2012-11-09",
"90335",
"34972",
"11",
"28",
"2",
"1",
"1"
],
[
"2012-10-18",
"34961",
"34972",
"11",
"28",
"2",
"1",
"2"
],
[
"2012-10-19",
"34996",
"34972",
"11",
"28",
"2",
"2",
"2"
]
]
}
可能的原因
我相对不知情的猜测是 DataTables 无法访问我的脚本,因为它是跨域的。
问题是,我无法将这些脚本放在同一个域中——我无法访问我们 VLE 上的 PHP 或 MySQL,该组织中的任何人也没有。
潜在的解决方案
我认为答案是尝试使用DataTables 函数中的UWA.Data
调用。
这是我用来访问我的脚本的 UWA 调用:UWA.Data.getJson('http://php.curriculum.local/cmd.php' + '?cmd=getObservations', fnCallback);
虽然我认为我还需要某种方式来发送 dataTables 的分页变量等,所以我可能需要使用完整的UWA.Data.request
调用,并发送一个params
对象。
可悲...
我完全不知道这是否可能,更不用说如何做到了。
任何人都可以提供指导吗?
提前致谢,