2014-02-13 64 views
0

我有一个Ajax脚本,每20秒就可以在我的服务器上调用一个php文件。Ajax成功,如果语句和echo mySQL查询结果

然后服务器运行一个简单的mysql查询来返回特定字段的内容。

如果这个字段是空白的,我希望php文件回显单词“pending”,当被成功处理程序捕获时,它会回想起初始函数。但是,如果该字段不是空白,它将包含我想要将用户重定向到的URL。该字段将更新从第一次通话开始5秒到5分钟之间的任何地方,并且该时间不能改变。

我认为主要问题可能与我的PHP文件,因为我不认为它是以成功处理程序识别的方式回显数据。然而,我已经详细说明了我的代码的两个部分,而成功处理程序似乎构建正确,我不是100%确定。

很新,所以如果道歉我没有正确地解释自己,但如果有人能帮助这将是巨大的:

更新 - 为清楚起见,我所寻求实现如下:

Ajax调用我的PHP文件。

PHP文件查询数据库

如果现场查询不包含任何数据回应“等待”这个词来阿贾克斯成功处理程序(IF),这反过来又回忆起最初的功能/ ajax调用。

如果所查询的字段包含数据(将是一个URL),将以通过window.location.assign(data)重定向用户的格式将此结果回显给ajax成功处理程序(ELSE)。

进一步更新

我设法解决这个问题使用来自@mamdouhalramadan和@martijn

我也改变setInterval来逐步的setTimeout作为该查询功能的建议的组合是导致反应叠起来如果服务器运行缓慢,并因此导致错误。我还添加了缓存:假的,并在成功处理程序进一步的选择要考虑到不同的效果,在IE浏览器:

AJAX

function poll() { 

        $.ajax({ 

         url: 'processthree.php?lead_id='+lead_id, 

         type: "GET", 

         cache: false, 

         async: false, 

         success: function(data3) { 

        //alert("pending called " + data3) 

         if(data3.indexOf("pending") >-1){ 

      setTimeout(poll, 20000); 

        } 

         else if ((navigator.userAgent.indexOf('MSIE') != -1)) { 

         //alert("Submit success - MSIE: " + data3); 

         parent.window.location.replace(data3); 

        } 

      else{   

         //alert("process three called " + data3) 

         window.top.location.assign(data3); 

        } 

      }, 



      error: function(xhr, error){ 

        //alert("Error"); 

        //alert("Error: " + error + ", XHR status: " + xhr.status); 

       }, 

       }); 

      } 

     setTimeout(poll, 20000); 

PHP

$query = ("SELECT column FROM table WHERE id = '$lead_id'") or die(mysql_error()); 

$result = mysql_query($query); 

$return = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $return = 'pending'; 
    if($row['column'] != '') 
    { 
    $return = $row['column']; 
    } 
} 
echo $return; 
+1

缩进是你的朋友... –

+0

我改变了你的代码了一下,你在mysql_query()上做了一个mysql_query(),修正了这个问题。在你的同时改变了if/else,同时改为可读性(IMO):) – Martijn

+0

@Martijn - 你的编辑无效.. –

回答

0

我相信使用JSON可能帮助你在这里,更不用说它更安全,像这样:

function poll() { 
         $.ajax({ 
         url: 'processthree.php?lead_id='+lead_id, 
         type: "GET", 
         dataType: 'json',//specify data type 
         success: function(data3) { 
          if(data3.res.indexOf("pending") >-1){ 
         //rest of the code..... 

然后在你的PHP:

$return = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $return['res'] = 'pending'; 
    if($row['column'] != '') 
    { 
    $return['res'] = $row['column']; 
    } 
} 
echo json_encode($return); 

注:使用PDO或mysqli的,而不是因为它已被弃用MySQL的。

+0

感谢@mamdouhalramadan。除非我误认为我可能是它现在似乎回声“挂起”而不是查询结果如果查询不是空的 - 我需要添加任何地方你说“指定数据类型” – user3091415

+0

@ user3091415 - 指定数据类型已经通过添加dataType:'something'来完成,现在如果查询不是空的'$ row ['column']!='''它会将$ row ['column'];'赋值给返回数组待处理。我移动回声json_encode($返回)完成后循环完成 –

+0

它似乎仍然只是循环,即使当查询的结果不应该是空白 - 我在查询中出现错误,你认为? '$ result = mysql_query($ query); $ return = array(); ($ row = mysql_fetch_assoc($ result)) { $ return ['res'] ='pending'; if($ row ['column']!='') { $ return ['res'] = $ row ['column']; } } echo json_encode($ return);' – user3091415