我正在重构一些代码。我有一个包含MySQL查询的PHP页面,并将结果存储在PHP变量$ my_result中。然后,在使用SWFObject嵌入期间,此结果将回显到Flash SWF。
我现在想要调用这个PHP页面,使得javascript函数的查询就像这样 - 我对PHP做出的一个改变是,不是将结果存储在变量$ my_result中,而是回应结果。
Javascript函数调用PHP页面并进行数据库查询
function getNewUploads() {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
alert(xmlhttp.responseText); // shows the correct output in an alert box
return xmlhttp.responseText;
}
}
xmlhttp.open("GET","dBaseConnect_uploadStep2.php",true);
xmlhttp.send();
}
然后我嵌入了Flash,我只想在页面上点击某个标签并由jabvascript处理时发生 -
function show_tab(tab_id) {
$(tab_id).show();
if(tab_id == "#tab_2") {
var data_string = getNewUploads(); // CALLING THE FUNCTION TO CALL THE PHP QUERY
alert(data_string); // shows undefined in the alert box
var so = new SWFObject(".....");
so.addVariable("theDataString", data_string);
so.write("flashcontent2");
}
}
因此似乎getNewUploads()函数不会从PHP页面返回结果。
任何人都可以解释我的错误。感谢
答案 0 :(得分:3)
调用是异步的。致电send
后,通话将在后台开始。在此期间,getNewUploads返回。稍后,您已分配的功能将通过答案进行调用。当你执行return xmlhttp.responseText
时,你将从这个匿名函数(分配给onreadystatechange)返回,而不是从getNewUploads(已经完成)返回。
您可以使用回调代替。类似的东西:
function getNewUploads(callback) {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET","dBaseConnect_uploadStep2.php",true);
xmlhttp.send();
}
function show_tab(tab_id) {
$(tab_id).show();
if(tab_id == "#tab_2") {
getNewUploads(function(data_string) {
alert(data_string);
var so = new SWFObject(".....");
so.addVariable("theDataString", data_string);
so.write("flashcontent2");
}); // CALLING THE FUNCTION TO CALL THE PHP QUERY
}
}
我们将getNewUploads定义为采用单个参数callback
。然后,在success函数中,我们使用单个参数(响应文本)调用回调。在show_tab
中,我们传递一个匿名函数,该函数将单个参数(响应文本)作为getNewUploads
参数传递给callback
。
答案 1 :(得分:0)
true
中的xmlhttp.open("GET","dBaseConnect_uploadStep2.php", true);
使其成为asynchronous因此错误。将其更改为:
function getNewUploads() {
//initialize xmlhttp
xmlhttp.open("GET", "dBaseConnect_uploadStep2.php", false);
xmlhttp.send();
if(xmlhttp.status == 200)
return xmlhttp.responseText;
else
return "Oops :(";
}