Цикл Foreach выполняется только один раз при вызове с помощью Ajax - PullRequest
0 голосов
/ 06 августа 2011

Я пытаюсь перебрать массив текстовой области ($ taskLinks) с помощью PHP и проверять каждую новую запись строки в базе данных на наличие совпадений и возвращать совпадения ($ 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) выше работает отлично, но я пытаюсь вызвать его с помощью AJAX, когда пользователь добавляет текстовую область, а затем возвращает любые совпадения из вышеприведенного.Для этого у меня есть ниже, в сочетании с onChange = "ajaxFunction ()" на textarea.

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 работает, но только для одной строки в текстовой области - мне нужно, чтобы он работал для нескольких строк, как это обычно происходит.

Что я могу сделать с AJAX, чтобы скрипт PHP проверял каждую запись в текстовой области?

1 Ответ

0 голосов
/ 06 августа 2011

Похоже, \ r теряется при работе со значениями textarea, поэтому ваш шаблон "\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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...