Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.11.2019, 12:22
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

Как отличать запросы на стороне PHP
let person = {
    name:"Vova",
    last:"Nak",
    age:18
}
function toPHP(){
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "phpForm1.php");
    xhr.setRequestHeader("Content-Type", "application/json");
   person = JSON.stringify(person);
   xhr.send(person);
    xhr.onreadystatechange = function(){
        if(xhr.readyState != 4) return;
        if(xhr.status != 200){
            console.log(xhr.status + ": " + xhr.statusText);
        } else{
            console.log("Hello", xhr.responseText);
            document.getElementById("info").textContent = xhr.responseText;

        }
    }

}

document.getElementById("goP").addEventListener("click",toPHP)

let count = 2;
function query() {
    count = count + 2;
    let http = new XMLHttpRequest();
    http.open("POST","phpForm1.php");
    http.setRequestHeader("Content-Type","text/plain");
    http.send(count);
    http.onreadystatechange = function () {
        if(http.readyState != 4) return false;
        if(http.status != 200){
            console.log(http.status + ": " + http.statusText);
        }else{
            console.log("hello",http.responseText);
        }
    }
      
}

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {

    $headers = getallheaders();

     

    if($headers['Content-Type']=='application/json') {

         

        $data = file_get_contents('php://input');

        $obj = json_decode($data); 

        $out =  print_r($obj,true);


    } else $out = 'Нет нечего!';

    exit($out);

}

$connect = mysqli_connect("localhost","root","root","ajax ");

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $headers_1 = getallheaders();

    if($headers_1['Content-Type'] == "text/plain"){

        $str = "Okay";

        $result = print_r($str,true);

    }else $result = "No,it cant be";
    
exit($result);
}
?>

Здраствуйте еще раз всем,можете пожалуста подсказать каким способом наилучшее отличать запросы AJAX на стороне сервера???
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2019, 12:50
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

да пожалуйста:
http://www.slimframework.com/
https://lumen.laravel.com/
https://laravel.com/
https://framework.zend.com/
Ответить с цитированием
  #3 (permalink)  
Старый 24.11.2019, 12:55
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

Спасибо,но это никак нельзя реализовать с помощью PHP,у меня запрос на скрипте(quire) должен обрабатываться вторым куском PHP
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $headers_1 = getallheaders();

    if($headers_1['Content-Type'] == 'text/plain'){

        // $str = file_get_contents('php://input');
        $str = $_POST['data'];

        $result = print_r($str,true);

    }else $result = "No,it cant be";
    
exit($result);
}
Ответить с цитированием
  #4 (permalink)  
Старый 24.11.2019, 13:01
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

вова ты переводишь гугл переводчиком...
извини, но твой скрипт, в будущем, рискует стать 1С Bitrix'ом ))) я не хочу принимать в этом участие...
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2019, 13:02
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

()
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2019, 03:03
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от vovaJsc
Здраствуйте еще раз всем,можете пожалуста подсказать каким способом наилучшее отличать запросы AJAX на стороне сервера???
Судя по коду, вы хотите отличать POST-запросы. Также смотрите список методов, показывающий, какие бывают запросы — https://developer.mozilla.org/ru/docs/Web/HTTP/Methods

Отличить вы можете, например, при помощи конструкции switch…
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {
	$data = file_get_contents('php://input');
	$headers = getallheaders();
	$output = NULL;

	switch ($headers['Content-Type']) {
		case 'application/json':
			$data = json_decode($data);
			header("Content-Type: application/json");
			$output = json_encode($data); // или что-то другое, вычисленное на основе данных
			break;

		case 'text/plain':
			header("Content-Type: text/plain");
			$output = $data; // или что-то другое, вычисленное на основе данных
			break;
		
		default:
			header("HTTP/1.1 400 Bad Request");
			break;
	}

	echo $output;
}
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2019, 03:39
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Malleys
отличать POST-запросы
Метод, и путь этим занимается роутинг.
Именно он определяет действия при том и инном path and methods
Примеров роутинга полно. Каждый соаременный фреймворк имеет свой роутинг обычно работающий с query, path, methods, database, yaml, json, ini ...
самый простой роутинг на php7
<?php 
# Author - Fedor Vlasenko, vlasenkofedor@mail.ru php 7
define('METHOD', $_SERVER['REQUEST_METHOD']);
define('URI', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));

function router($url, ...$args)
{
    (empty($args[1]) || false !== strpos(METHOD, $args[0]))
    && (URI === $url || preg_match('#^' . $url . '$#iu', URI, $match))
    && die(call_user_func_array(end($args), $match ?? []));
}

router('/', function () {
    echo 'Index page';
});

router('/article/(.*[^/])', 'GET', function (...$args) {
  echo 'Article: ', $args[1];
});

header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
echo '404';

по сути более понятно было, чтобы вы не писали магию и взависимости от заголовков отдавали ответ
а прямо в (пути, query, параметрах) указывали тип ответа
person, person-xml, person?type=xml

Последний раз редактировалось Vlasenko Fedor, 25.11.2019 в 03:44.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в обработчик php через Ajax передать несколько значений? Urukhay Общие вопросы Javascript 2 30.08.2014 16:19
Как добавить результаты работы скрипта в переменные PHP? Hurray Events/DOM/Window 1 03.11.2013 15:29
Как поставить мои ajax запросы в очередь? Romingood AJAX и COMET 1 18.10.2013 23:38
Как получить javasript массив из php? dima_tr AJAX и COMET 6 01.02.2013 03:37
Вставка блока php в js...Как сделать? reup Общие вопросы Javascript 2 30.07.2009 11:02