2015-08-04 2 views
0

Я попытался отправить данные в LocalStorage для PHP с AJAX, но я получаю ошибкуАякса отправить данные в PHP из LocalStorage

undefined index data 

Этот код генерирует dataurl, который хранится в LocalStorage. Когда пользователь нажимает на ссылку, вызывается pdfGen.php, где я хочу использовать данные в localstrage.

chart.php 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#download').click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "pdfGen.php", 
       data: {data:'hello'}, 
       success: function(data) { 
        alert("hi"); 
       } 
       }); 
     }); 
    }); //END $(document).ready() 
</script> 

<script> 
    //<![CDATA[ 
    (function() { 
    window.onload = function(){ 
     html2canvas(document.getElementById('chart'), { 
       "onrendered": function(canvas) { 
        var img = new Image(); 
        img.onload = function() { 
         img.onload = null; 
         console.log(canvas.toDataURL("image/png")); 
         window.localStorage.setItem("imgURL", canvas.toDataURL("image/png")); 
        }; 
        img.onerror = function() { 
         img.onerror = null; 
         if(window.console.log) { 
          window.console.log("Not loaded image from canvas.toDataURL"); 
         } else { 
          //alert("Not loaded image from canvas.toDataURL"); 
         } 
        }; 
        img.src = canvas.toDataURL("image/png"); 
       } 
      }); 
     }; 
    })(); 
//]]> 
</script>  
<body> 
    <a href="pdfGen.php" id="download" >Report</a> 
    ..more code to generate the chart 
</body> 

Кнопка загрузки вызывает сценарий pdfGen.php, который использует fpdf для создания отчета.

pdfGen.php

<?php 
    echo $_POST['data']; //gives error 
    /*$pdf = new FPDF(); 
    $pdf->AddPage(); 

    //over here I want to add the image from the chart.php page whose data url is now in the localstorage. 
    ..more code to generate report 
    $pdf->output();*/ 
?> 

Как получить данные внутри сценария PHP? Я пытаюсь сделать вызов ajax, но я получаю undefined index в скрипте pdfGen.php. Я получил предупреждение HI, но не смог получить данные на сервере. Это не работает.

ответ

3

В вашем AJAX определить такие данные:

$.ajax({ 
       type: "POST", 
       url: "pdfGen.php", 
       data: { data: 'hello' }, 
       success: function(data) { 
        alert("hi"); 
       } 
     }); 

теперь вы можете получить его с помощью $ _POST [ "данные"]. Похоже, вам нужно больше узнать о документации jquery ajax, прочитайте здесь друга http://api.jquery.com/jquery.ajax/.

элемент «данные» в AJAX ваши параметры

данные для отправки на сервер. Он преобразуется в строку запроса, если еще не строка. Он добавляется к URL-адресу для запросов GET. См. параметр processData для предотвращения этой автоматической обработки. Объект должен быть парами ключ/значение. Если значением является массив, jQuery сериализует несколько значений с одинаковым ключом на основе значения традиционной настройки (описано ниже).

см. Жирные тексты из документации jquery ajax.

EDIT

Найдена вторая ошибка, его ваша ссылка, вы делаете Ajax и затем ссылка также перенаправляет на pdfGen.php из HREF, чтобы предотвратить это, вы можете сделать HREF «#», или вы можете использовать preventdefault():

$('#download').click(function(event) { 
     event.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: "pdfGen.php", 
      data: {data:'hello'}, 
      success: function(data) { 
       alert("hi"); 
      } 
      }); 
    }); 

ВТОРОЙ EDIT

Похоже, вы должны перенаправить pdfGen.php, чтобы получить отчеты, то вы могли бы не нужно ajax, что вам нужно сделать, это поместить параметр в вашу ссылку href.

<a href="pdfGen.php?data=hello" id="download" >Report</a> 

и получить его через $ _GET ["data"]; в php.

+0

на самом деле это все еще не работает. Я получаю ту же ошибку. Я уже пытался отправить как ключ/значение json как данные, но все еще работает nt – rkbom9

+0

Хм ... это странно, попробуйте ли вы метод $ .post()? попробуйте использовать это, и я узнаю, почему код выше не работает. – VMcreator

+0

да она не такая же ошибка сделал $ .post ("pdfGen.php", { данные: "привет" }, функция (данные) { }); – rkbom9

1

Ошибка Ваша ошибка в том, что вы направляетесь к pdfGen.php с помощью тега anchor. Ajax-запрос отправит данные и получит ответ в функции успеха. Когда вы используете <a href="pdfGen.php" id="download" >Report</a>, вы фактически возвращаетесь к pdfGen.php без какого-либо значения в $ _POST ['data'].

Ajax вызова, как показано ниже:

var toSend = "data:"+jsVariableContainingYourText; (or simply "data:Hello";) 
$.ajax({ 
      type: "POST", 
      url: "pdfGen.php", 
      data: toSend, 
      success: function(data) 
      { 
        alert("hi"); 
      } 
     }); 

В pfdGen.php, как хорошая практика программирования, вы должны также проверить, если переменная пост установлен или нет.

if(isset($_POST['data']) 
{ //do something } 
else 
{ //appropriate message } 

Также убедитесь, что URL для AJAX вызова правильно (в вашем случае, pdfGen.php должен находиться в той же папке, что и HTML-файл)

+0

, он переходит в состояние else, которое не должно происходить. Таким образом, это означает, что данные не были доступны как пост, который является более странным, хотя мы сделали сообщение ajax – rkbom9

Смежные вопросы