我正在尝试使用Ajax在我的html文件(包含javascript)中实现php函数。我试图获取本地所有JSON文件的文件。我尽力遵循这个:http://tinyurl.com/n7zttd9但我遇到了麻烦。出于某种原因,我在我的警告声明中得到了未定义(这是我到目前为止最接近打印声明的内容,但如果还有其他选项要打印,我对它们非常开放)。这是我的本地html文件的一些代码:
<script language="javascript" type="text/javascript">
<!--
//Browser Support Code
function AjaxCaller(){
var xmlhttp;
try{
// for firefox, safari, opera
xmlhttp = new XMLHttpRequest();
}catch(e){
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
alert("Your browser broke!");
}
}
}
if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function callPage(url, div){
ajax=AjaxCaller();
ajax.open("GET", url, true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4){
if(ajax.status==0){
div.innerHTML = ajax.responseText;
}
}
}
ajax.send(null);
}
//-->
</script>
<script id='code-js' type="text/javascript">
/*...*/
function load(){
var jsonstuff = callPage('findjson.php', document.getElementById('checkjson'));
alert(jsonstuff);
Scene.loadObject(jsonstuff);
}
/*...*/
</script>
这是我的php代码(文件是本地的findjson.php)
<?php
function checkjson() {
foreach (glob("*.json") as $filename) {
return $filename;
}
?>
我使用的ajax.status代码为0,因为我在网上发现它必须为0才能在本地使用。我几乎在每一行都放置了alert语句,它似乎通过了所有代码ok(就像它的状态为0和readyState为4)。我认为我对于document.getElementById的ID是错误的,但我不确定还有什么要放。我知道在我发布的网址中他们使用了targetId,但我不认为我应该使用它,因为我没有定义它。
如果有任何不清楚的地方,请告诉我。非常感谢你:))
答案 0 :(得分:0)
AJAX是异步的。当alert
向您显示undefined
时,请求将无法完成。您需要使用回调函数等待请求完成,然后才能访问服务器的响应。
答案 1 :(得分:0)
您的PHP代码需要echo
数据而非return
。因为该函数是由AJAX调用的,而不是另一个PHP函数,所以需要从PHP的角度将调用视为页面请求,而不是函数调用。当AJAX调用php脚本时,确保某些东西也调用该函数。
<?php
function checkjson() {
foreach (glob("*.json") as $filename) {
echo $filename;
}
checkjson();
?>
您的第二个问题是,在ajax可以使用响应更改页面之前,Scene.loadObject(jsonstuff);
已经执行。在ajax请求在以下块内完成后,需要调用该函数:(成功的状态代码为200,而不是0。)
if(ajax.status == 200){
div.innerHTML = ajax.responseText;
}
编辑:使用jquery也会让您的生活更轻松。