2011-08-05 98 views
0

我試圖用PHP循環訪問一個textarea數組($ taskLinks),並檢查每個新的行對數據庫的匹配項並從數據庫返回匹配項($ a) :當用Ajax調用Foreach循環時只執行一次

$a = array(); 
    $array = split("\r\n", $taskLinks); 
    foreach($array as $url){ 
    $query = "SELECT url FROM links 
    WHERE `url` 
    LIKE '$url' 
    AND `projectId` = '$projectId'";  
    $result = mysql_query($query); 
    $row = mysql_fetch_object ($result); 
    $matchedLink = $row->url; 
    array_push ($a,$matchedLink); 
    } 
    foreach ($a as $row){ 
     echo "$row\r"; 
    } 

上述作品完美,但我嘗試當用戶添加到文本區域,然後返回從上面的任何比賽用AJAX調用它的PHP腳本(稱爲linkchecker.php)。爲此,我在textarea上加上了onChange =「ajaxFunction()」。

ajaxRequest.onreadystatechange = function(){ 
      if(ajaxRequest.readyState == 4){ 
       var ajaxDisplay = document.getElementById('ajaxDiv'); 
       ajaxDisplay.innerHTML = ajaxRequest.responseText; 
       document.myForm.time.value = ajaxRequest.responseText; 
      } 
     } 
     var taskLinks = document.getElementById('taskLinks').value; 
     <!-- 
     <?php 
     echo("var projectId = ('$projectId');"); 
     ?> 
     // --> 
     var queryString = "?taskLinks=" + taskLinks + "&projectId=" + projectId; 
     ajaxRequest.open("GET", "linkchecker.php" + queryString, true); 
     ajaxRequest.send(null); 
    } 

的問題是PHP腳本似乎只能當一個行被添加到textarea的工作 - 變量被傳遞到腳本中的查詢字符串和PHP腳本的工作,但只針對第一行中的textarea - 我需要它像通常那樣爲多條線路工作。

我可以對AJAX做些什麼以確保PHP腳本檢查textarea中的每個條目?

+0

您可以創建一個通過每一行循環的功能在textarea中,並將這些數據傳遞給PHP腳本並根據響應執行所需的函數。 – RobB

回答

0

使用textarea的值時,\ r會丟失,因此您的模式"\r\n"不匹配。
您可以使用:

$array = split("[\r\n]+", $taskLinks); 

...相反。

或者使用例如jQuery的serialize()(如果可能),它保留\ r

如果你不能使用jQuery,你也可以使用jQuery的方法來保留\ r。
它取代的/\r?\n/g內串occurencies與"\r\n"

編輯:


還需要編碼參數:

var queryString = "?taskLinks=" + encodeURIComponent(taskLinks) + 
        "&projectId=" + encodeURIComponent(projectId); 
+0

感謝您的回答。不幸的是編輯php模式沒有運氣。我認爲真正的問題是在AJAX中,PHP在同一頁面上完成時確實工作正常。 – jimbo2087

+0

查看我編輯的帖子 –