Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.04.2019, 02:13
Интересующийся
Отправить личное сообщение для Maklay Посмотреть профиль Найти все сообщения от Maklay
 
Регистрация: 01.10.2017
Сообщений: 19

Не понятен результат XMR
Добрый день:

Есть вот так вот реализованный XMR:
/* XHR возвращающий промис */
function xhr(body, target) {
    return new Promise(function (resolve, reject) {
        let xhr = new XMLHttpRequest();
        xhr.open('POST', target, true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(body);
        xhr.onreadystatechange = function () {
            if (xhr.status == 200 && xhr.readyState == 4) {
                // вывести результат
                console.log(xhr.responseText);
                resolve(xhr.responseText)

            } else if (xhr.status !== 200) {
                // обработать ошибку
                console.log('ERROR: ' + xhr.status + ': ' + xhr.statusText); // пример вывода: 404: Not Found
                reject('Error')

            }
        }
    })
}

которым я обращаюсь к php файлу следующего вида:
<?
include '\SQL_conn.php';
    $dataName=mysql_real_escape_string($_POST['data-name']);
    $query = "SELECT * FROM zvkb where Self=" .$dataName ;
    $result = mysql_query($query);
    if ($result) {
        while ($row = mysql_fetch_array($result)) {
            if(mysql_num_rows($result) > 0){
            $Self = $row["Self"];
            $Enemy = $row["Enemy"];
            echo "Self: " . $Self . " | Enemy:" . $Enemy . "<br>";
        }
        else {
            echo '';
        }
    }
    }
mysql_close();
?>


Суть вопроса:
При условии что mysql вернет данные, все работает корректно, но при пустом результате запроса xhr.responseText почему то принимает значение 2*"перенос строки", что ставит меня в тупик(ведь по моей логике должено вернуться ''). Подскажите в чем может быть проблема/
Ответить с цитированием
  #2 (permalink)  
Старый 14.04.2019, 04:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Maklay
едь по моей логике должено вернуться ''
Вот с логикой как раз и плохо - сначала проверяют сколько рядов вернул запрос, а затем принимают решение есть ли смысл в цикле.

Выражение if(), это проверка булевого значения, а mysql_num_rows кроме чисел ничего не возвращает, и 0, это false, а больше 0, это true. То есть вполне хватит if(mysql_num_rows($result)).

mysql_fetch_array($result) - вернет два набора, индексный и ассоциативный. А зачем, если первый вам не нужен?

$Self = $row["Self"]; и $Enemy = $row["Enemy"]; - это бесполезные операции в данном случае.

Оригинальное расширение MySQL в новых версиях РНР больше не поддерживается, как минимум нужно использовать mysqli.
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2019, 00:51
Интересующийся
Отправить личное сообщение для Maklay Посмотреть профиль Найти все сообщения от Maklay
 
Регистрация: 01.10.2017
Сообщений: 19

Благодарю, переписал на mysqli в объектном стиле, и по пути исправил ошибки и нелогичности.

Но продолжу пожалуй задавать вопросы в этой теме, чтобы не плодить их далее. С помощью того же XMR отправляю вот такой запрос:
ps=0&id=46&name=gfh&points=230%2C96%20375%2C108&commPointX=308&commPointY=103

вот его вид без сериализации текстовой части:
ps=0&id=46&name=gfh&points=230,96 375,108&commPointX=308&commPointY=103


в адрес другого php файла. Но, почему то в переменную $_POST, не попадают значения из commPointX и commPointY (остальные корректно попадают). В чем может быть проблема.
Заранее благодарен.

Последний раз редактировалось Maklay, 19.04.2019 в 00:54.
Ответить с цитированием
  #4 (permalink)  
Старый 19.04.2019, 05:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Трудно сказать в чем вы допускаете косяк. Вообще пробелы и запятые будут кодированы как раз так, как запросе:

alert(encodeURIComponent('230,96 375,108'))


а на сервере будут декодированы и проблем не будет.

Здесь нет явного кодирования, но тем не менее на сервер все уйдет как положено, выполните и в ответ получите переданное.

<?
if($_POST) {
    exit(print_r($_POST, 1));
}
?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open('POST', location);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send('ps=0&id=46&name=gfh&points=230,96 375,108&commPointX=308&commPointY=103');
    xhr.onload = function() {
        alert(xhr.responseText)
    }
</script>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 19.04.2019, 08:17
Интересующийся
Отправить личное сообщение для Maklay Посмотреть профиль Найти все сообщения от Maklay
 
Регистрация: 01.10.2017
Сообщений: 19

Полный вывод $_POST, показывает что на месте этих переменных пустые строки.
Ответить с цитированием
  #6 (permalink)  
Старый 19.04.2019, 09:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Maklay
Полный вывод $_POST
Где, в вашем коде или при запуске скрипта что я показал (отдельно)?
Ответить с цитированием
  #7 (permalink)  
Старый 19.04.2019, 10:17
Интересующийся
Отправить личное сообщение для Maklay Посмотреть профиль Найти все сообщения от Maklay
 
Регистрация: 01.10.2017
Сообщений: 19

Проверил у себя в файле. Для чистоты эксперимента запущу предложенный. Но, так как он ничем не отличается по сути, а массив $_POST нигде не меняется, сомневаюсь что результат будет иным.
Ответить с цитированием
  #8 (permalink)  
Старый 19.04.2019, 10:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Maklay
Но, так как он ничем не отличается по сути
То что в отдельном файле работает без проблем, по крайней мере и на локальном сервере у меня, и на удаленном. Собственно проверить можно гораздо проще, запустив любой php файл с простым кодом и добавив в url ?ps=0&id=46&name=gfh&points=230%2C96%20375%2C108&c ommPointX=308&commPointY=103:

<?
echo '<pre>';
print_r($GET);


И никаких проблем быть не должно, а если есть, то это уже настройки сервера.
Ответить с цитированием
  #9 (permalink)  
Старый 21.04.2019, 22:08
Интересующийся
Отправить личное сообщение для Maklay Посмотреть профиль Найти все сообщения от Maklay
 
Регистрация: 01.10.2017
Сообщений: 19

Действительно проблема была в сервере (в чем причина не понял), при переустановке openserver? все стало работать как часы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывести результат AJAX в div с динамическим ид voron121 AJAX и COMET 6 30.05.2016 18:46
Как передать результат в другую функцию hakudjin Общие вопросы Javascript 1 16.09.2015 11:52
Результат дистанции двух точек черех google map чтобы выводился на отдельную страницу fastabst Элементы интерфейса 2 01.12.2014 17:43
Связать формы и результат обработчика Calisto Общие вопросы Javascript 0 04.04.2012 15:11
Достать результат выполнения ajax-запроса из функции EvgeniyRRU AJAX и COMET 6 04.11.2011 19:32