我有一个奇怪的问题,我的 Ajax 呼叫没有任何响应。我得到了数据,但是当我试图返回它时,我只得到了一个空白屏幕。我的项目中需要3个文件,因为我的项目具有许多DB调用和函数,因此更易于阅读。
所以这是调用我的ajaxCall函数的众多函数之一
$.when(ajaxCall("getOutlets", '', null)).done(function(res) {
if(res) {
console.log(res);
这是整个项目的全局ajaxCall函数:
function ajaxCall(functionName, params, answers) {
return jQuery.ajax({
type: "POST",
url: '/ajax/ajax.php',
dataType: 'json',
data: {
functionIdentifier: functionName,
functionParams: params,
},
然后我的Ajax.php文件基于functionName调用我的 database.php 文件中的函数。 Ajax.php
:
$response = array();
switch ($functionIdentifier) {
case 'getOutlets':
$response = $database->getSearchOutletsFromDatabase($functionParams);
break;
.... many switch cases
}
echo json_encode($response);
die();
?>
最后在我的database.php中,它调用如下所示的mysqli函数:
public function getSearchOutletsFromDatabase() {
$result = mysqli_query($this->conn, "CALL `sp_outlets_get`()") or die(mysqli_error($this->conn));
while($row = $result->fetch_assoc()) {
$response[] = $row;
}
@mysqli_next_result($this->conn);
return $response;
}
这是奇怪的部分。如果我从$result
仅返回一个对象,例如return $result->fetch_object()
,则我成功返回第一个对象。但是,当我只是将行保存在数组中并想返回我的数组时,整个响应为空。没有错误。没有。
如果您需要更多信息,请说出来,我会尝试添加更多信息。
编辑: 如果我将其放在返回响应的ajax.php文件之上,那么我在开发人员网络标签上会收到以下错误消息:
header('Content-Type: application/json');
$response = array();
switch ($functionIdentifier) {
case 'getOutlets':
$response = $database->getSearchOutletsFromDatabase($functionParams);
break;
.... many switch cases
SyntaxError:JSON.parse:第1行第1列的数据意外结束 JSON数据
答案 0 :(得分:1)
我发现了导致错误的原因(有时这是最容易的事情之一)。好吧,我的回复是ö,ä,ü
等。
在将数据返回给ajax之前添加utf8_encode
可以解决此问题。
public function getSearchOutletsFromDatabase() {
$result = mysqli_query($this->conn, "CALL `sp_data_get`()") or die(mysqli_error($this->conn));
$response = array();
while($row = $result->fetch_assoc()) {
$res['ID'] = $row['ID'];
$res['Name'] = utf8_encode($row['Name']);
array_push($response, $res);
}
@mysqli_next_result($this->conn);
return $response;
}