jQuery AJAX操作的困难

时间:2013-09-28 19:31:06

标签: javascript php jquery json

我正在创建一个用户名检查程序,它接收POST数据并将其发送到PHP脚本,该脚本创建一个简单的数组(现在只有2个键),它将传递回jQuery并将其回显到<p>标记中。我可以通过编写所有数据来调用它,但每当我尝试访问数据中的单个键时(记住它的数组),它只返回空白或}。这是我的代码。

HTML / JavaScript的

<!DOCTYPE html>
<html lang='en'>
    <head>
        <title>Username Checker</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    </head>
    <body>
        <center>
            <h1>Username Checker</h1>
            <input type="text" id="name" />
            <input type="button" value="Submit" id="submit" />
            <br />
            <br />
            <hr />
            <br />
            <p id="status"></p>
        </center>

        <script type='text/javascript'>
            $('input#submit').on('click', function() {
                var name = $('input#name').val();
                if ($.trim(name) != '') {
                    $.post('status.php', {name: name}, function(data) {
                        document.getElementById('status').innerHTML= data[0];
                    });
                }
            });
        </script>
    </body>
</html>

status.php

<?php
function remoteStatusCode($url){
    $agent = $_SERVER['HTTP_USER_AGENT'];
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL,$url );
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch,CURLOPT_VERBOSE,false);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch,CURLOPT_SSLVERSION,3);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($httpcode == 404) {
        $httpcode = "<span style='color:red;'>".$httpcode;
        $httpcode .= "</span>";
    }
    else {
        $httpcode = "<span style='color:green;'>".$httpcode;
        $httpcode .= "</span>";
    }
    return $httpcode;
}

$name = $_POST['name'];

$status = array(
    'youtube' => remoteStatusCode('https://www.youtube.com/user/'.$name),
    'deviantart' => remoteStatusCode('http://'.$name.'.deviantart.com/'),
);

echo json_encode($status, JSON_UNESCAPED_SLASHES);
?>

请不要告诉我,我的代码容易受到攻击或任何攻击,因为我完全清楚我没有添加任何检查,因为它仍处于测试阶段且我还没有计划发布它。

1 个答案:

答案 0 :(得分:0)

http://api.jquery.com/jQuery.parseJSON/

在post回调中,尝试在访问数据之前显式地将响应转换为json。 php没有将内容类型设置为application / json(参见:https://stackoverflow.com/questions/267546/correct-content-type-http-header-for-json),因此结果只是一个字符串。

$.post('status.php', {name: name}, function(data){
    var obj = $.parseJSON(data);
    document.getElementById('status').innerHTML= obj.youtube; 
});