通过AJAX在Javascript中调用PHP函数时遇到问题
我正在尝试使用Ajax在我的html文件(包含javascript)中实现一个php函数。我试图在本地获取所有JSON文件。我尽力做到这一点:但我遇到了麻烦。出于某种原因,我的alert语句中没有定义(这是迄今为止我能得到的最接近于print语句的东西,但是如果有其他选项可以打印,我会非常开放)。以下是我的本地html文件的一些代码:通过AJAX在Javascript中调用PHP函数时遇到问题,php,javascript,html,ajax,Php,Javascript,Html,Ajax,我正在尝试使用Ajax在我的html文件(包含javascript)中实现一个php函数。我试图在本地获取所有JSON文件。我尽力做到这一点:但我遇到了麻烦。出于某种原因,我的alert语句中没有定义(这是迄今为止我能得到的最接近于print语句的东西,但是如果有其他选项可以打印,我会非常开放)。以下是我的本地html文件的一些代码: <script language="javascript" type="text/javascript"> <!-- //Browser Su
<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>
/*...*/
函数加载(){
var jsonstaff=callPage('findjson.php',document.getElementById('checkjson');
警报(JSONSTAFF);
加载对象(jsonstaff);
}
/*...*/
这是我的php代码(本地文件为findjson.php)
我使用了0的ajax.status代码,因为我在网上发现,对于本地,它必须是0。我在几乎每一行都放上了alert语句,它似乎通过了所有代码ok(好像它的状态为0,readyState为4)。我认为document.getElementById的Id是错误的,但我不确定还要放什么。我知道在我发布的url中他们使用了targetId,但我认为我不应该使用它,因为我没有定义它
如果有什么不清楚的地方,请告诉我。非常感谢:)AJAX是异步的。当
警报显示未定义时,请求将不会完成。您需要使用回调函数等待请求完成,然后才能访问服务器的响应。您的PHP代码需要回送数据,而不是返回它。由于该函数是由AJAX调用的,而不是由另一个PHP函数调用的,因此需要从PHP的角度将该调用视为页面请求,而不是函数调用。确保在AJAX调用该php脚本时也有东西在调用该函数
<?php
function checkjson() {
foreach (glob("*.json") as $filename) {
echo $filename;
}
checkjson();
?>
编辑:使用jQUery也会让你的生活更轻松。它必须是echo
,而不是return
,因为这个网站上还有无数其他的重复:AJAX是异步的。xmlhttp将执行,然后立即返回并允许执行警报。在稍后的某个时刻,来自服务器的响应会出现,此时您的代码已经开始运行,并且正在停止执行其他操作。您的PHP代码在语法上也应该是正确的。AJAX调用本身并不调用PHP函数,它只能请求页面但正如前面所说的,您应该首先使用编写良好的AJAX实用程序代码(jQuery),而不是像复制和粘贴一样繁琐。@Musa这是发布的代码OP中的响应处理程序块。感谢您的捕获,完全错过了这一点。
<?php
function checkjson() {
foreach (glob("*.json") as $filename) {
echo $filename;
}
checkjson();
?>
if(ajax.status == 200){
div.innerHTML = ajax.responseText;
}