我正在尝试从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:未定义数据
我以前有这个,但从未能从中恢复过来。
答案 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成功中使用其他变量而不是数据。