2016-08-06 3 views
-2

Я хочу передать path переменную от js до plus-page.php, а затем перейти на эту страницу.Передача переменной - Неопределенная ошибка индекса

$("#btnpage").click(function(){ 
     path = $('#spantwrap').html(); 
     console.log(path); // works, that's a simple html code. 
     $.ajax({ 
      url: 'plus-page.php', 
      type: 'post', 
      data: {'path': path}, 
      success: function() { 
       console.log(path); 
      } 
     }); 
    location.href = 'plus-page.php'; 
    }); 

плюс page.php

<form id="form1" action="?" method="post">  
<input type="hidden" name="path" value="<?php echo $_POST['path'];?>" // line 46 
</form> 

Ошибка: Undefined index: path on line 46...

+0

НЕТ необходимость в ajax, если вы перенаправлены ng просто отправьте форму, используя php –

+0

Попробуйте: isset ($ _ POST ['path']) && $ _POST ['path']? $ _POST ['path']: ''; – Tarek

+2

Теперь вы отправляете вызов AJAX POST и загружаете этот URL сразу после этого через GET. Вы должны либо сделать что-то с выходом вашего вызова Ajax в обратном вызове 'success', либо просто отправить форму на этот URL. – redelschaap

ответ

2

Решение, конечно, избавиться от Ajax вызова и просто опубликовать форму plus-page.php, потому что это не имеет никакого смысла в нынешнем виде

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

<?php 
if (isset($_POST['path']) 
{ 
    $_SESSION['path'] = $_POST['path']; 

    // to stop only in case of AJAX call use the following line: 
    // if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 

    die(); 
} 
?> 

<form id="form1" action="?" method="post">  
<input type="hidden" name="path" value="<?php echo $_SESSION['path'];?>" // line 46 
</form> 

Обратите внимание, что это не имеет никакого смысла, если вы хотите перенаправить immediataly

3

Проблема заключается в том, что вы сразу же перенаправляет, и не проходя по переменной в перенаправлении. Поскольку вы перенаправляете немедленно, вызов ajax, который находится в процессе, никогда не запускается и почти прекращается.

Просто удалите свой АЯКС вызов целиком и установить место так:

location.href = "plus-page.php?path=" + encodeURIComponent(path); 

... и использовать $_GET['path'] вместо $_POST['path'].

В качестве альтернативы, если вы действительно хотите сделать вызов Ajax первым, ждать его завершения перед переходом к новой странице:

$.ajax({ 
    url: 'plus-page.php', 
    type: 'post', 
    data: {'path': path}, // Side note: The ' here are unnecessary (but harmless) 
    success: function() { 
     location.href = 'plus-page.php'; // You might or might not add path here as 
             // above, it's unclear why you'd do the 
             // ajax then redirect 
     console.log(path); 
    } 
}); 
1

Попробуйте вместо этого:

$("#btnpage").click(function(){ 
    path = $('#spantwrap').html(); 
    console.log(path); // works, that's a simple html code. 

    var form = document.createElement("form"); 
    var element1 = document.createElement("input"); 

    form.method = "POST"; 
    form.action = "plus-page.php"; 

    element1.value=path; 
    element1.name="path"; 
    form.appendChild(element1); 

    document.body.appendChild(form); 

    form.submit(); 
}); 

Этого создает форму, добавляет путь как вход в форму и отправляет форму.

+0

Я понял, что форма, представленная в коде, была для другой страницы, и он, казалось, получал контент из пролета не форма :) –

+0

А, конечно, он был. Doh! –

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