Foreach循环仅在使用Ajax调用时执行一次

时间:2011-08-05 23:09:33

标签: php mysql ajax

我正在尝试使用PHP循环遍历textarea数组($ taskLinks)并针对匹配数据库检查每个新行条目并从数据库返回匹配项($ a):

    $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";
    }

上面的PHP脚本(称为linkchecker.php)工作得很好,但是当用户添加到textarea然后返回上面的任何匹配时,我试图用AJAX调用它。要做到这一点,我有以下内容,结合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中的每个条目?

1 个答案:

答案 0 :(得分:0)

在使用textarea的值时,看起来\ r \ n会丢失,因此您的模式"\r\n"不匹配。
你可以使用:

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

...来代替。

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

如果你不能使用jQuery,你也可以使用jQuery的方法来保持\ r。
它用/\r?\n/g

替换"\r\n"内部字符串的出现

修改


您还需要对参数进行编码:

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