我有一个由代理加载程序调用的PHP代码,该代码仅在数据表中的onInitCreate
事件上触发。我想要做的是,当用户点击add button
时,它必须在select
字段中加载教师姓名。
我已经尝试过这段代码,但它什么也没有返回,或者我应该说一个空值。我确信它应该只返回一行。 这是我的PHP代码,它获取教师的名字并将其返回。
getFacultyNames.php
<?php
error_reporting(-1);
require_once("config.php");
$sql="SELECT lastName, firstName, middleName FROM table_faculty";
$result = mysql_query($sql);
$stack=array();
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result))
{
$name = $row[0]." ,".$row[1]." ".$row[2];
array_push($stack,array("label" => $name, "value" => $name));
}
echo json_encode($stack); //here it returns [{"label":"Last ,First Middle","value":"Last ,First Middle"}]
?>
jquery代码:
function loader(){
$.ajax({
"url": 'php/getFacultyNames.php',
"async": false,
"dataType": 'json',
"success": function (json) {
console.log( json );
//the getFacultyNames.php is now returning correct values,
//but how would I be able to get the value of the json code properly?
//it always throws an error ""parsererror" SyntaxError
//is it proper to have a code `return json;` in this success function?
},
"error" : function( jqXHR, textStatus, errorThrown ){ console.log( jqXHR, textStatus, errorThrown ); }
});
}
这是我的编辑器初始化代码:
var editor = new $.fn.dataTable.Editor( {
"ajaxUrl": "php/table.facultyloading.php",
"domTable": "#facultyloading",
"events": {
"onInitCreate":function (){
editor.add( {
"label": "Assign to Faculty",
"name": "facultyName",
"type": "select",
"ipOpts":loader() // Returns array of objects - .ajax() with async: false
});
}
},
"fields": [
{
"label": "Subject Name",
"name": "name",
"type": "select",
"ipOpts": [
{
"label": "sample",
"value": "sample"
}
]
},
{
"label": "Day",
"name": "day",
"default": "Monday",
"type": "checkbox",
"ipOpts": [
{
"label": "Monday ",
"value": "Monday "
},
{
"label": " Tuesday ",
"value": " Tuesday "
},
{
"label": " Wednesday ",
"value": " Wednesday "
},
{
"label": " Thursday ",
"value": " Thursday "
},
{
"label": " Friday ",
"value": " Friday "
},
{
"label": " Saturday",
"value": " Saturday"
}
],
"separator": "|"
},
{
"label": "Start Time",
"name": "startTime",
"type": "text"
},
{
"label": "End Time",
"name": "endTime",
"type": "text"
},
{
"label": "Room",
"name": "room",
"type": "text"
}
]
} );
我似乎无法弄清楚出了什么问题。我错过了什么?你能帮帮我吗? 提前谢谢!
答案 0 :(得分:1)
我已经将mysql函数转换为PDO_MySQL
,最后它的工作原理是我的新getFacultyNames.php
并且我还修改了我的jquery代码。感谢你的帮助! :)
<强> getFacultyNames.php 强>
<?php
error_reporting(-1);
require_once("config.php");
$stack=array();
$stmt = $dbh->prepare("SELECT lastName, firstName, middleName FROM table_faculty");
if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['lastName']." ,".$row['firstName']." ".$row['middleName'];
array_push($stack,array($name,$name));
}
echo json_encode($stack);
}
?>
jquery代码
function names(){
var test= new Array({"label" : "a", "value" : "a"});
test.splice(0,1);
$.ajax({
"url": 'php/getFacultyNames.php',
"async": false,
"dataType": 'json',
"success": function (json) {
for(var a=0;a < json.length;a++){
obj= { "label" : json[a][0], "value" : json[a][1]};
test.push(obj);
}
},
"error" : function( jqXHR, textStatus, errorThrown ){ console.log( jqXHR, textStatus, errorThrown ); }
});
return test;
}
答案 1 :(得分:0)
将die
添加到getFacultyNames.php
的末尾。
echo json_encode($stack);
die;
<强>更新强>
尝试删除"dataType": 'json'
并在callbaks中设置:
try {
json = JSON.parse(data);
}
catch (e) {
console.log("Parse error:"+e);
};
答案 2 :(得分:0)
使用此
function loader(){
var responseText = $.ajax({
"url": 'php/getFacultyNames.php',
"async": false,
"dataType": null,
"error" : function( jqXHR, textStatus, errorThrown ){
console.log( jqXHR, textStatus, errorThrown );
}
}).responseText;
return $.parseJSON(responseText)
}
这将执行AJAX调用并返回格式正确的JSON对象。