2013-09-28 33 views
-1

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

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

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

+0

记住它的一个数组_我不这么认为。试试'data.youtube',或者真的只是在你的ajax回调中执行'console.log(data)'来查看数据的外观。 –

+0

@JasonP它返回undefined并且控制台返回这个{“youtube”:“ 404”,“deviantart”:“ 200” }(与我刚刚调用数据相同) – George

+0

如果'data'为'{“youtube”:“ 404”,“deviantart”:“ 200“}',那么'data.youtube'应该是' 404':http://jsfiddle.net/PABaW/ –

回答

0

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

在后回调

,尽量明确地访问数据之前的响应转换成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; 
}); 
+0

Returns as undefined ..:L .. – George

+0

obj [0]返回undefined或obj.youtube返回undefined?如果数据返回为“{”youtube“:” 404“,”deviantart“:” 200“}'并且你将它解析成一个json对象,你可以通过obj.propertyname来访问它。看:http://jsfiddle.net/CwuWv/ – nebulae

+0

我使用的是原生的innerHTML = obj.youtube,这是行不通的,但只要我切换到jQuery .html()它的工作。奇怪... – George