Почему ajax 'post' не работает? - PullRequest
0 голосов
/ 07 января 2020

Я хочу отправить данные на сайт php и распечатать. Печать php не работает. Я уже изучил другие вопросы, но ничего полезного. Это не сработает. Почему?

JS (работает)

$.ajax({
  url: 'https://whatever.com/data.php',
  type: 'POST',
  dataType: 'json',
  contentType: 'application/json',
  async: false,
  data: data
});

PHP бэкэнд (не работает)

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
header('Content-type: application/json;charset=utf-8');
$json = file_get_contents('php://input');
$data = json_decode($json);
print_r($data); ?>

Ответы [ 2 ]

1 голос
/ 08 января 2020

Если вы введете URL-адрес в адресную строку вашего браузера, браузер отправит запрос на этот URL-адрес и отобразит ответ в окне (или просто сохранит его в файл, если это тип, который он может ') визуализация в окне).

Если вы поместите <img src="http://example.com/some.jpeg" alt=""> на страницу, отображаемую в окне браузера, браузер отправит запрос на этот URL-адрес и отобразит изображение, которое он возвращает в указать на странице. (Обратите внимание, что она не заменяет целую страницу изображением, она <img> не является ссылкой).

Если вы используете Ajax (через XMLHttpRequest, fetch или библиотека-оболочка, такая как jQuery или ax ios) для запроса URL-адреса, затем браузер отправит запрос на этот URL-адрес и передаст ответ обратно в JavaScript.

. что произойдет с этими данными потом: Вы должны написать JavaScript, что сделает это.

Вы не загружаете новую веб-страницу в окне браузера. Вы не можете загрузить изображение с элементом <img>. Вы получаете данные с JavaScript. (Обычно, когда люди делают это, они хотят сделать что-то более интересное, чем либо заменить всю страницу данными, либо добавить данные в самый конец страницы. Нет ничего разумного, что можно сделать по умолчанию, кроме как позволить JavaScript автор решает, что с ним делать).

Текущие версии jQuery возвращают объект, который можно просмотреть, поэтому вы можете рассматривать его как обещание получить данные:

$.ajax({
  url: 'https://whatever.com/data.php',
  type: 'POST',
  dataType: 'json',
  contentType: 'application/json',
  data: data
}).then(function (data) {
    alert(data);
});

Вы, вероятно, захотите сделать что-то более интересное, чем просто предупредить ответ. В MDN есть вводное руководство по работе с документами с помощью JavaScript.

Хорошо, я понял, что должен ответить на ответ цели в javascript , Но как мне тогда сказать, что эти данные должны быть напечатаны на целевой странице? Например: скрипт на google.com собирает пользовательские данные, затем отправляет эти данные на example.com и распечатывает их там.

Это становится все более неясным, но предполагается, что вы имеете в виду:

Когда кто-то посещает страницу, JavaScript используется для отправки HTTP-запроса на сервер. Позже, когда кто-то посещает страницу на этом сервере, я хочу показать эти данные

Затем вам нужно где-то хранить данные. Обычно это происходит в базе данных.

  1. JavaScript запускает и отправляет данные POST по URL-адресу
  2. PHP по URL-адресу вставляет их в базу данных
  3. Позже кто-то посещает страницу на этом сервере
  4. PHP просматривает базу данных, чтобы выяснить, есть ли там какие-либо данные, и включает ее в страницу

Если, на с другой стороны, вы имеете в виду:

Кто-то смотрит на страницу (A). Когда кто-то посещает другую страницу (B), JavaScript используется для отправки HTTP-запроса на сервер. Данные должны быть немедленно , показанные на странице A

… тогда вы должны искать WebSockets, так как вам нужно будет sh передать данные в браузер.

0 голосов
/ 07 января 2020

Последнее обновление, я полагаю, использование ajax вводит вас в заблуждение, вместо этого вы можете создать форму прямо через js и опубликовать ее, вот так вы напечатаете ответ php ...

в js:

var url = '/test.php'; // or https://whatever.com/data.php
var value = 'MTIzLGZlZg';
var form = $('<form action="' + url + '" method="post">' +
  '<input type="text" name="my_var" value="' + value + '" />' +
  '</form>');
$('body').append(form);
form.submit();

в php

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
header('Content-type: application/json;charset=utf-8');
// now the posted value is in $_POST
echo $_POST['my_var']; 
?>
...