Javascript jqueryajax操作的困难

Javascript jqueryajax操作的困难,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我正在制作一个用户名检查器,它接收POST数据并将其发送到一个PHP脚本,该脚本创建一个简单的数组(现在只有2个键),该数组被传递回jQuery,并将其回送到一个标记中。我可以通过写入所有数据来调用它,但每当我尝试访问数据中的单个键(请记住它是一个数组)时,它只返回空白或}。这是我的密码 HTML/JavaScript <!DOCTYPE html> <html lang='en'> <head> <title>Userna

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

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>

用户名检查器
用户名检查器




$('input#submit')。在('click',function()上{ var name=$('input#name').val(); 如果($.trim(名称)!=“”){ $.post('status.php',{name:name},函数(数据){ document.getElementById('status').innerHTML=data[0]; }); } });
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);
?>

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

在post回调中,尝试在访问数据之前将响应显式转换为json。php没有将内容类型设置为application/json(请参阅:),因此结果只是一个字符串

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

请记住,这是一个数组-我不这么认为。尝试
data.youtube
,或者在ajax回调中执行
console.log(data)
,看看数据是什么样子。@JasonP它返回未定义的,console返回这个{“youtube”:“404”,“deviantart”:“200”}(就像我刚刚调用数据一样),如果
data
{“youtube”:“404”,“deviantart”:“200”}
,然后
data.youtube
应该是
404
:它返回未定义的,即使在控制台中,我的fiddle显示它可以工作,您能在fiddle中重现您的问题吗?obj[0]返回未定义的还是obj.youtube返回未定义的?如果数据以
{“youtube”:“404”、“DeviceArt”:“200”}
的形式返回,并将其解析为json对象,则可以作为obj.propertyname访问它。看:我使用的是本机innerHTML=obj.youtube,但这不起作用,但当我切换到jQuery.html()时,它就起作用了。奇怪。。。