Вход

Просмотр полной версии : Как отличать запросы на стороне PHP


vovaJsc
24.11.2019, 12:22
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 на стороне сервера???

SuperZen
24.11.2019, 12:50
да пожалуйста:
http://www.slimframework.com/
https://lumen.laravel.com/
https://laravel.com/
https://framework.zend.com/

vovaJsc
24.11.2019, 12:55
Спасибо,но это никак нельзя реализовать с помощью 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);
}

SuperZen
24.11.2019, 13:01
вова ты переводишь гугл переводчиком...
извини, но твой скрипт, в будущем, рискует стать 1С Bitrix'ом ))) я не хочу принимать в этом участие...

vovaJsc
24.11.2019, 13:02
()

Malleys
25.11.2019, 03:03
Здраствуйте еще раз всем,можете пожалуста подсказать каким способом наилучшее отличать запросы 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;
}

Vlasenko Fedor
25.11.2019, 03:39
отличать 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