jQuery DataTable在Document Ready上返回JSON

时间:2016-07-27 15:58:26

标签: javascript php jquery json datatables

我正在尝试从PHP脚本返回JSON以填充DataTable。

以下是名为'api / exceptions_all.php'的PHP脚本:

 <?php
 $select = "SELECT '', [FOR_PARTNER], [FOR_NAME] FROM [brokerage].[dbo].[for_exceptions]";  

 $query = sqlsrv_query($dbc, $select);

 $out = array();
 while( $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC) ) 
 {
   $out[] = $row;
 }
 echo json_encode($out);    

 ?>

当我在浏览器中提取文件时,我可以看到JSON并且格式正确:

 [{"":"","FOR_PARTNER":"0000111222","FOR_NAME":"CUSTOMER1 "},{"":"","FOR_PARTNER":"0000333111","FOR_NAME":"CUSTOMER2"}]

这是我试图用来检索JSON的jQuery:

 $(document).ready(function()
 {
   $.ajax({
     type: 'GET', // not sure if I should use POST or GET
     url: 'api/exceptions_all.php',
     dataType: 'json',
     async: false,
     data: data,
     success: function(data)
     {
       console.log(data); // I'm guessing the success is where I should populate the table rows
     },
     fail: function()
     {
       console.log('fail');
     }
   });
 });

这是我最初设置表格的HTML:

 <table class='table table-bordered display nowrap' id='example1' cellspacing='0' width='100%'>
 <thead>
 <tr>
   <th><!--column used for editing--></th>
   <th>Partner Code</th>
   <th>Partner Name</th>
 </tr>
 </thead>
 <tbody id="tableBody">
 <!-- this is where the datatable rows should be displayed -->
 </tbody>
 </table>

在同一个HTML文件中,我格式化Datatable(现在我想到了,我不确定我是否需要这个):

 <script type="text/javascript">
 table = $('#example1').DataTable({
   "iDisplayLength": 25,
   "autoWidth": true,
   "scrollX": true,
   "scrollY": 550,
   "stateSave": true,
   "dataType": "json"
 });
 </script>

完成所有这些后,我收到的控制台错误如下:

  

未捕获的ReferenceError:未定义数据

我以前有这个,但从未能从中恢复过来。

3 个答案:

答案 0 :(得分:1)

您似乎没有通过AJAX将数据传递到PHP脚本&#39; api / exceptions_all.php&#39;。

所以你在jQuery代码中不需要这一行

data: data

删除它,你得到的错误应该消失

答案 1 :(得分:1)

有几件事。正如@GeorgePant所说,如果您的SQL中没有data子句,则不需要WHERE参数,因为您没有向PHP脚本传递任何内容。另一件事是,如果你正在进行同步调用(我不会没有充分的理由,特别是如果你这样做只是因为你不知道如何处理异步调用),那么你不要使用{ {1}}参数。而是在success属性中返回您的数据。这采取以下形式:

responseText

var x = $.ajax({yadayada}).responseText; 是一个内部回调函数,在响应完成时被调用。想想这样。同步的形式是“获取这些数据,我会等到你拥有它。”异步的形式是“获取这些数据,并在你拥有它时让我知道”。如果您正在做前者,那么您需要的只是数据。如果您正在执行后者,则首先需要通知数据已到达,然后您需要数据。 success参数(顺便说一下,已被success函数替换 - 向前和向上以及所有这些)是该通知,您附加到它的函数将您的数据提供给它作为参数。

不推荐使用同步调用的原因是,在调用完成之前,它们会阻止用户对页面执行任何其他操作。这并不意味着它们不应该被使用。使用同步调用的一个很好的理由的例子是这个。我有一个不在网上运行的应用程序;相反,它是一个使用浏览器容器的内部数据库应用程序。如果用户在字段中输入库存号,我想查询是否已输入该库存号,并向用户发送消息。如果用户输入重复的号码,我不希望用户离开该字段。这意味着我想在查找号码时阻止浏览器活动;这意味着同步通话。

答案 2 :(得分:1)

由于您没有定义变量数据,导致问题, 所以尝试删除数据:数据行,看起来你只是得到一个通常不会接受查询字符串的JavaScript文件:

$(document).ready(function()
 {
   $.ajax({
     type: 'GET', // not sure if I should use POST or GET
     url: 'api/exceptions_all.php',
     dataType: 'json',
     async: false,
     success: function(response)
     {
       console.log(response); 
     },
     fail: function()
     {
       console.log('fail');
     }
   });
 });

还试图在ajax成功中使用其他变量而不是数据。