首先,我道歉,因为这是我第一次使用JSON。
我的网站有一个客户端脚本,可以从服务器请求人员数据。服务器首先查询数据库(使用mysql和mysqli),然后将数据(名称,年龄等)返回给客户端。
具体来说,我想将一个关联数组从PhP端传递给客户端。
在做了一些研究之后,我决定用AJAX JSON调用来做这件事。
客户端 调用是这样完成的:
var person_id = $('#my_text_box').val();
$.ajax({
url: 'php/upload/my_server_script.php',
method: 'POST',
data: {id: person_id},
dataType: 'json',
cache: false,
success: function(response_data)
{
alert(response_data['name']); //The server should return an associative array
console.log(response_data);
},
error: function(jqXHR, textStatus, errorThrown)
{
console.log(arguments);
console.log(jqXHR.responseText);
console.log('Error: ' + errorThrown + ' ' + textStatus + ' ' + jqXHR);
}
});
服务器端调用一个方法,该方法将查询数据库并提供具有所请求ID的人员的详细信息。
$ id = $ _POST ['id'];
function getPersonData($ id) { $ personData = array();
(1 - Connect and SELECT name FROM Persons WHERE id = {$id}
2 - Fill the $personData array with result row
3 - Name will be saved in $personData['name'])
return json_encode($personData);
AJAX调用失败,错误 500 - 内部服务器错误。当我在浏览器上检查服务器响应的内容时(在Chrome,网络选项卡上),它表示没有响应(此请求没有可用的响应数据)。
问题是, 此代码在本地完美运行 。但是当我将它上传到我的云网络服务器时,我网站中唯一失败的AJAX调用是那些使用JSON作为传输数据格式的调用。其他的工作正常。
我尝试了几件事:
这四个都没有奏效。我有什么可忘记的?
注意:浏览器的日志内容如下:
Arguments[3]
0: Object
1: "error"
2: "Internal Server Error"
callee: function (jqXHR, textStatus, errorThrown)
length: 3
__proto__: Object
*(url of my script file)*
Error: Internal Server Error error [object Object] ^
注意#2 :完整PhP 代码:
//Fetch persondata for a specific ID, and encode the data in an array in JSON format
function JSONSelectPersonDataFromID($ID)
{
$personData = array(); //Array or array with results
//If querysuccess, commit. Else, rollback
$querySuccess = True;
//This method opens connection with root user
$conn = OpenDBConn();
$conn->autocommit(False);
try
{
if($videoID > 0)
{
$sql = "SELECT name FROM Persons WHERE id={$id}";
//Debugging
//echo $sql . "<br>";
$persons = mysqli_query($conn, $sql);
if(mysqli_connect_errno($conn))
{
$querySuccess = False;
}
if(isset($persons ) && (count($persons ) > 0))
{
//Loop through every scene
$personData = $persons ->fetch_array(MYSQLI_ASSOC);
}
else
{
return null;
}
}
else
{
$querySuccess = False;
}
}
catch(Exception $e)
{
$querySuccess = False;
}
if(!$querySuccess)
{
//Rollback
$conn->rollback();
die("Transaction failed");
}
else
{
//Commit
$conn->commit();
}
//Close the connection
DBClose($conn);
return json_encode($personData );
}
答案 0 :(得分:1)
“内部服务器错误”表示服务器在某处崩溃但出于安全原因,客户端仅获得500错误。检查服务器的错误日志文件,应该有错误的真正来源(一些实际错误,文件和行号)。你应该从那里开始。
答案 1 :(得分:0)
使用AJAX的PHP脚本是否有权读取其他PHP脚本?