我正在尝试使用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中的每个条目?
答案 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);