Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为javascript/服务器提供处理时间_Php_Javascript_Mysql - Fatal编程技术网

Php 为javascript/服务器提供处理时间

Php 为javascript/服务器提供处理时间,php,javascript,mysql,Php,Javascript,Mysql,我有一个令人困惑的问题。我正在制作音乐目录/播放列表/播放器。当用户将歌曲拖动到播放列表中时,会向php发送一个请求(通过javascript/ajax),php会在数据库中查找歌曲,并返回歌曲信息,然后将歌曲信息组织并显示在播放列表中。这很有效。我遇到的问题是当一张专辑被放在播放列表上时(它只是递归地调用歌曲处理函数)。如果在处理每首歌曲之前我都有一个提醒,那么它的效果会非常完美;当然,我不希望用户只需点击20个提醒就可以添加相册,他们应该只看到成品。当我解除警报时,只显示最后一首歌。我猜服务

我有一个令人困惑的问题。我正在制作音乐目录/播放列表/播放器。当用户将歌曲拖动到播放列表中时,会向php发送一个请求(通过javascript/ajax),php会在数据库中查找歌曲,并返回歌曲信息,然后将歌曲信息组织并显示在播放列表中。这很有效。我遇到的问题是当一张专辑被放在播放列表上时(它只是递归地调用歌曲处理函数)。如果在处理每首歌曲之前我都有一个提醒,那么它的效果会非常完美;当然,我不希望用户只需点击20个提醒就可以添加相册,他们应该只看到成品。当我解除警报时,只显示最后一首歌。我猜服务器可能需要更多的时间?可能是javascript?我不知道,我在抓救命稻草。有没有人遇到过类似的问题??非常感谢您提供的所有帮助……

如果不了解您与服务器的交互方式,就很难回答这个问题。PHP+Mysql不需要更多的时间——也就是说,如果您正在等待服务器返回消息的话。另一方面,如果javascript决定不管是否收到服务器的回音都要执行某项操作,那么很可能会遇到竞争条件问题。
发布一些代码,详细说明您如何在服务器和脚本之间进行通信,这将有助于找出问题所在。

如果不了解您如何与服务器交互,则很难回答这个问题。PHP+Mysql不需要更多的时间——也就是说,如果您正在等待服务器返回消息的话。另一方面,如果javascript决定不管是否收到服务器的回音都要执行某项操作,那么很可能会遇到竞争条件问题。
发布一些代码,详细说明您如何在服务器和脚本之间进行通信,这将有助于找出哪里出了问题。

这看起来您可能在某个地方遇到了一些竞争条件。不幸的是,如果没有看到一些代码,就很难诊断这些问题。当然,如果您的代码很长,这里的人很难快速地理解它,以便回答您的问题和/或解决您的问题


我建议在一个较小的测试页面上重现你的问题。你可能会在这个过程中解决它,但如果你能复制它,我们可以帮助:-)

这看起来你可能在某个地方有一些种族条件。不幸的是,如果没有看到一些代码,就很难诊断这些问题。当然,如果您的代码很长,这里的人很难快速地理解它,以便回答您的问题和/或解决您的问题


我建议在一个较小的测试页面上重现你的问题。您可能会在这个过程中解决它,但如果您可以复制它,我们可以帮助:-)

一旦歌曲处理功能清除了它所做的一些事情

if(xmlHttp){
try{
  var params = ("elementId=" + elementId);
  //alert(params);
  xmlHttp.open("GET", "php/p_songInfoRetrevial.php?" + params, true);
  //the weird function stuff is because you're assigning a function to a variable
  xmlHttp.onreadystatechange = function(){p_handleRequestStateChange(elementId, elmVertPosition);};
  xmlHttp.send(null);
}//end try
catch(e){
  alert("Can't connect to server: \n" + e.toString());
}//end catch
}//end if(xmlHttp)

一旦歌曲处理功能清理了一些事情,它就会

if(xmlHttp){
try{
  var params = ("elementId=" + elementId);
  //alert(params);
  xmlHttp.open("GET", "php/p_songInfoRetrevial.php?" + params, true);
  //the weird function stuff is because you're assigning a function to a variable
  xmlHttp.onreadystatechange = function(){p_handleRequestStateChange(elementId, elmVertPosition);};
  xmlHttp.send(null);
}//end try
catch(e){
  alert("Can't connect to server: \n" + e.toString());
}//end catch
}//end if(xmlHttp)
整个初始函数(在播放列表中删除任何内容时调用):

函数p_进程(elementId){
//警报(“已进入p_流程”);
//检查删除的元素是否为单曲
var newSong=document.getElementById(elementId);
//警报(“newSong id=“+newSong.getAttribute('id'));
if(newSong.hasAttribute('class')){
//警报(“新闻声有属性类”);
if(newSong.getAttribute('class')=='song'| | | newSong.getAttribute('class')=='row偶数'| | | newSong.getAttribute('class')==='row奇数'){
警惕(“新闻歌曲是一首歌”);
//设置元素的垂直位置
var aryPosition=ObjectPosition(document.getElementById(elementId));
var elmVertPosition=aryPosition[1];
//克隆人帐户
if(elementId.match(“克隆”)){
elementId=elementId.substr(6);
}
//删除播放列表中已有的项目并修复elementId
if(elementId.match(/\b\d{4}/){
//呼叫重新排序
oldNode=document.getElementById(elementId);
oldNode.parentNode.removeChild(oldNode);
//snyc播放器和播放列表(减量)
//警报(“发送”+elementId+“updateFlashPlrIndex”);
updateFlashPlrIndex(elementId,'dec');
//警报(“从syncplrsub返回”);
//删除前导播放列表编号(#####)
elementId=elementId.substr(4);
}//如果结束
if(xmlHttp){
试一试{
变量参数=(“elementId=“+elementId”);
//警报(参数);
open(“GET”、“php/p_songinformetrevial.php?”+params,true);
//奇怪的函数是因为你把一个函数赋给了一个变量
xmlHttp.onreadystatechange=function(){p_handleRequestStateChange(elementId,elmVertPosition);};
xmlHttp.send(空);
}//结束尝试
捕获(e){
警报(“无法连接到服务器:\n”+e.toString());
}//端接
}//如果结束(xmlHttp)
}//结束内部if
//新元素不是一首歌
else if(newSong.getAttribute('class')='show'){
//警报(“其他输入”);
var newElm=新声;
对于(var currElm=newElm.firstChild.nextSibling.nextSibling;currElm!==null;currElm=currElm.nextSibling){
//警报(“发送到p_进程的currElm=“+currElm.getAttribute('id'));
p_进程(currElm.getAttribute('id');
}//结束
}
否则{//需要跳过s,这只适用于集合/安可
警报(“其他输入”);
var newElm=新声;
对于(var currElm=newElm.firstChild.nextSibling;currElm!==null;currElm=currElm.nextSibling){
//警报(“发送到p_进程的currElm=“+currElm.getAttribute('id'));
p_进程(currElm.getAttribute('id');
}//结束
}//结束其他
}//结束外部if
}
整个初始函数(在播放列表中删除任何内容时调用):

函数p_进程(elementId){
//警报(“已进入p_流程”);
//检查删除的元素是否为单曲
var newSong=document.getElementById(elementId);
//警报(“newSong id=“+newSong.getAttribute('id'));
if(newSong.hasAttribute('class')){
//警报(“新闻声有属性类”);
if(newSong.getAttribute('class')='son
   //remove items already in playlist and fix elementId
   if(elementId.match(/\b\d{4}/))
   {
    //CALL REORDER
    oldNode = document.getElementById(elementId);
    oldNode.parentNode.removeChild(oldNode);

    //snyc player and playlist (decrement)\
    updateFlashPlrIndex(elementId, 'dec');

    //remove leading playlist number (####)
    elementId = elementId.substr(4);
   } // end if( elementId.match(/\b\d{4}/) )
var params = "elementIDs=[" + elementIDs.join() + "]";
//  Parameter checking goes here
$elementIDs = json_decode($_GET['elementIDs']);