[英]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.