2016-08-06 6 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の必要性単にPHPを使用してフォームを送信してください。 –

+0

:isset($ _ POST ['path'])&& $ _POST ['path']? $ _POST ['path']: ''; – Tarek

+2

これですぐにAjax POST呼び出しを送信し、その直後にGET経由でURLをロードしています。 'success'コールバックでAjax呼び出しの出力を行うか、そのURLにフォームを送信するだけです。 – redelschaap

答えて

2

解決策は、それが現在の形で

をどんな意味がないので、AJAX呼び出しを取り除くだけplus-page.phpにフォームをポストを取得することはもちろんですが、あなたは本当にこのロジックを持つようにしたい場合は、すなわち2ページ目に可変して、あなたがセッション中に渡された値を保つ必要があり、

<?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コールは実際には開始されず、ほとんど直ちに終了します。

ただ、完全にあなたのAJAX呼び出しを削除し、そうのような場所を設定:

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

...と$_POST['path']の代わりに$_GET['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

ああ、もちろん彼だった。ドー! –