2014-02-13 65 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