簡體   English   中英

jQuery DataTable在文檔就緒時返回JSON

[英]jQuery DataTable returning JSON on Document Ready

我正在嘗試從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文件中,進一步格式化數據表(現在考慮了一下,不確定是否需要此表):

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

完成所有這些操作后,我收到一個控制台錯誤,內容為:

未被捕獲的ReferenceError:未定義數據

我以前曾有過,但從未從中恢復過。

您似乎沒有通過AJAX將數據傳遞到PHP腳本“ api / exceptions_all.php”。

因此,您不需要在jQuery代碼中使用此行

data: data

刪除它,您得到的錯誤應該消失

有幾件事。 正如@GeorgePant所說,如果您的SQL中沒有WHERE子句,則不需要data參數,因為您沒有向PHP腳本傳遞任何內容。 另一件事是,如果您正在進行同步調用(我不會沒有充分的理由,特別是如果您僅僅因為不知道如何處理異步調用而這樣做),那么您就不會使用success參數。 而是,您的數據將在responseText屬性中返回。 采取以下形式:

var x = $.ajax({yadayada}).responseText;

success是一個內部回調函數,響應完成后將被調用。 這樣想吧。 同步的形式為“獲取此數據,我將等到您擁有它”。 異步形式為“獲取此數據,並在有數據時通知我”。 如果您正在做前者,那么您只需要數據。 如果要進行后者,則首先需要通知數據已到達,然后才需要數據。 success參數(順便說一句,已被done()函數所取代-向前和向上等等)就是該通知,您附加到該函數的函數會將數據作為參數提供給它。

不贊成使用同步調用的原因是,它們阻止用戶在調用完成之前對頁面執行任何其他操作。 這並不意味着它們永遠都不會被使用。 使用同步調用的一個很好的例子是這個。 我有一個無法在網絡上運行的應用程序; 而是一個內部db應用程序,它使用瀏覽器作為容器。 如果用戶在字段中輸入了庫存編號,我想查詢是否已經輸入了該庫存編號,並向用戶發送消息。 如果他們輸入重復的號碼,我不希望用戶離開該字段。 這意味着我想在瀏覽號碼時阻止瀏覽器活動; 這意味着同步呼叫。

造成此問題的原因是,您沒有定義變量數據,因此請嘗試刪除data:數據行,看起來您只是在獲取一個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成功中使用其他變量代替數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM