我發現了很多與這個話題的職位。但我發現的解決方案並不適合我。一些專家建議改變代碼結構,但我不知道我該怎麼做。Ajax調用每個循環內
我想要什麼:
1)獲取的電影列表從SQL數據庫
2)獲取來自網站的信息,每部電影
問題,我面對: PHP MAX_TIMEOUT發生。
解決方案心想:調用異步REQ每部電影,分別
瓶頸:太多異步請求
能否請您指點如何實現(如果可能的話只有JS,不是jQuery的請)?
從網上的一些解決方案:
1)使用異步= FALSE ....我不希望使用SYNC REQ,毫無意義的使用Ajax然後
2)收集的所有數據,然後進行Ajax調用一次...嗯,我做了第一次..但它是一個長腳本(從Web獲取電影信息),所以最終導致PHP MAX_TIMEOUT
3)增加PHP MAX_TIMEOUT ...不可行,我不知道要增加多少。
JS
function loadData(mArray){
mArray = [{"movieid":"1","title":"10 Things I Hate About You"},{"movieid":"2","title":"100 Girls"}]; // TO SIMLYFY, I PUT THIS CODE HERE .. NORMALLY I GET THIS ARRAY USING ANOTHER AJAX CALL
for (var i = 0; i < mArray.length; i++) {
var obj = mArray[i];
webAjaxcall(obj["mid"],obj["title"]); // DEFINITELY NOT A GOOD IDEA
}
return true;
}
function webAjaxcall(mid,title){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
//DO SOMETHING
}
}
xmlhttp.open("POST","file2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
params = "title="+title+"&mid="+mid;
xmlhttp.send(params);
}
以防萬一有人想知道我怎麼填充JS數組:
FILE 1
$sql = "SELECT `movieid`,`title` FROM movielist";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_assoc($result)){
$output[] = $row;
}
exit(json_encode($output));
FILE 2
$json=file_get_contents("http://www.website.com/?t=".rawurlencode($moviename));
$info=json_decode($json);
DO SOMETHING
Ajax獲得MOVIELIST
var xmlhttp=new XMLHttpRequest();
var myarr;
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
myarr = xmlhttp.responseText;
loadData(JSON.parse(myarr));
}
}
xmlhttp.open("POST","file1.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
params = "fname=<?php echo $ses_id;?>";
xmlhttp.send(params);
當你調用你的loadData函數?在窗口加載或其他東西? – Manwal