Переменная AJAX не считывается из файла PHP?

#javascript #php #ajax

#javascript #php #ajax

Вопрос:

Это мой javascript, который содержит функцию для сохранения файла.

 function saveMap()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7 , Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  map = document.getElementById("sectorTableMap").innerHTML;
  data = '<table id="sectorTableMap">';
  data  = map;
  data  = '</table>';
  document.getElementById("sectorTableMap").innerHTML = data;
  //alert("done");
  //alert(data);


  if(fileName=="lastSave - RENAME") {
    return alert("Please set a file name under [CONFIG]");
  }
  else {
    //alert(data);
    //alert(user);
    //alert(fileName);
    xmlhttp.open("POST","http://pardustools.comuf.com/saveMap.php?t=" Math.random(),true);
    xmlhttp.send('map=' data 'amp;user=' user 'amp;fileName=' fileName);
    //alert(data);
    //alert(user);
    //alert(fileName);
  }
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200)
    {
    //return alert("File has successfully been saved!");
    return alert(xmlhttp.responseText);
    }
  }
}
 

Это мои файлы, которые тоже публикуются.

 <?php
$user = strtolower($_POST['user']);
$map = $_POST['map'];
$fileName = "savedMaps/".$user."/".$_POST['fileName'].".html";
file_put_contents($fileName,$map);
echo $fileName."<br />".$map;

?>
 

Это результат, который я получаю в файле php.

savedMaps//.html

Это должно быть больше похоже на это

savedMaps/randomName/fileName.html

Редактировать:

Установить для пользователя.

 user = "<?php $cookie = $_COOKIE['mapperlogauth']; echo strtolower($cookie['user']);?>";
 

Для установки для данных…
Он находится под функцией saveMap() и начинается с map .

Комментарии:

1. Вы должны URL-кодировать POST отправляемые вами данные

2. Вам пришлось бы показывать больше javascript.. в частности, где user инициализируется и присваивается значение

3. @hindmost приведите мне пример — мозг мертв прямо сейчас.

4. @Pricey дайте мне один момент, пожалуйста.

5. Почему вы используете чистый JS? Используйте jQuery, это упрощает выполнение AJAX-запросов

Ответ №1:

Вы используете PHP $_POST get, вы не публикуете никаких переменных, вы должны использовать $_GET в вашей ситуации или правильно изменить отправку xmlhttp на post. редактировать вам также не хватает заголовка типа содержимого для успешной публикации

редактировать Вы также должны знать, что существует ограничение на то, сколько вы можете отправить, используя используемую вами технику. (который является get, а не post, даже если вы его укажете)

Я бы также рекомендовал изучить jQuery для кроссбраузерной совместимости и простоты использования.

Редактировать

Вот некоторый код, который позволит вам получить его по почте:

 xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henryamp;lname=Ford");
 

Комментарии:

1. Теперь я понимаю, что вы имеете в виду, мне не хватало моего заголовка… .-. Неуклюжий я.. Кстати, я тебя ненавижу (на самом деле не просто завидую, что ты решил это, вероятно, за несколько минут, пока я занимался отладкой и прочим). Но большое спасибо… Хотел выполнить эту функцию перед тем, как лечь спать…

2. lol, не беспокойтесь. Я начал с xmlhttp еще в 2001 году, изучил трудный путь без какой-либо документации. Буквально мне потребовались недели, чтобы понять, как ОПУБЛИКОВАТЬ 😉

Ответ №2:

Вы пытались использовать :

 xmlhttp.send('map=dummyamp;user=' user 'amp;fileName=' fileName);
 

Я сомневаюсь, что это может быть вызвано кодировкой.

Комментарии:

1. Он неправильно настраивает xmlhttp для выполнения post, поэтому $_POST не найдет никаких переменных, потому что на самом деле они находятся в $ _GET

2. @user3036342 Он устанавливает POST в xmlhttp.open («POST», …); верно? Вы говорите, что это неправильно?

3. Нет, это не так, я отредактировал свой ответ, чтобы отразить, что он также забыл установить тип содержимого для успешного выполнения post, поэтому, даже если он укажет POST, он будет проходить как GET .

4. @user3036342 Я также думаю, что он должен добавить тип содержимого, но это не обязательно.

5. Он был прав…. Я сделал фиктивный тест, который все еще не работал… Теперь это работает. Это был заголовок.