使用JSON和$ .ajax将数组从PhP传递到jQuery

时间:2013-12-21 00:26:57

标签: php jquery ajax json response

首先,我道歉,因为这是我第一次使用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作为传输数据格式的调用。其他的工作正常。

我尝试了几件事:

  • 首先,检查,如果PhP端的数组为空或构建有错误。不是,所有正确的值都存在;
  • 其次,包括 application / json 到云服务器 mime.type 文件(它是Apache);
  • 然后,在我的服务器端脚本中包含标题('Content-Type:application / json');
  • 此外,将“ contentType:'application / json '”添加到客户端 $。ajax

这四个都没有奏效。我有什么可忘记的?

注意:浏览器的日志内容如下:

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 );
}

2 个答案:

答案 0 :(得分:1)

“内部服务器错误”表示服务器在某处崩溃但出于安全原因,客户端仅获得500错误。检查服务器的错误日志文件,应该有错误的真正来源(一些实际错误,文件和行号)。你应该从那里开始。

答案 1 :(得分:0)

使用AJAX的PHP脚本是否有权读取其他PHP脚本?