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