2015-11-06 62 views
0

我是PHP新手,想要弄清楚我確定的基本知識。我想要做的是在JavaScript中生成變量,並將這些傳遞給PHP頁面,然後加載並顯示。問題是,我似乎能夠將POST變量同時加載到PHP頁面並加載PHP頁面,但無法使用我發佈的變量加載PHP頁面。如何使用javascript傳遞的變量加載PHP頁面

這裏是我的代碼示例: 的index.php

... 
<script language="javascript"> 
     function passToPHP(){ 
      $.ajax({ 
       type: "POST", 
       url: "/TraceExperiment/TraceExperiment.php", 
       data: { 
        varToPass: "foo" 
       }, 
       success: function(){ 
       window.location.href="/TraceExperiment/TraceExperiment.php"; 
       } 
      }) 
     } 
    </script> 
<input type="button", value="displayPHP", onclick="passToPHP()"></input> 

TraceExperiment.php

<?php 
    $tempVar = $_POST["varToPass"]; 
    echo("hello" . $tempVar); 
    print_r($_POST); 
?> 

當我點擊displayPHP是,AJAX POST成功, TraceExperiment發生了什麼。 PHP加載罰款(它實際上有一堆其他的HTML,PHP等代碼加載和顯示正常,但爲簡單起見,我排除了這一點),但$ _POST數組似乎是空的。 即什麼結束了當我嘗試回聲和打印POST陣列和變量被顯示爲:

說明:未定義指數:varToPass在C:\ XAMPP \ htdocs中\ TraceExperiment \ TraceExperiment.php 3 線helloArray()

任何幫助解決這個將不勝感激。最終,我簡單地通過一種方式來顯示使用從JavaScript文件傳遞的變量的PHP頁面。

+0

檢查你的概念POST請求,'varToPass'被作爲'POST'參數傳遞,但是當你重定向用戶,你怎麼期待'varToPass'在場 ?在'成功'回調中,如果@Cam想要重定向到同一頁面並使用'varToPass'的值進行操作(而不僅僅是打印),$ _SESSION也可以用在TraceExperiment上,那麼你會發現'processed html' – Rayon

回答

0

你可以這樣做

GET請求
<script language="javascript"> 
      function passToPHP(){ 
       var varToPass= "foo" 
       window.location = "/TraceExperiment/TraceExperiment.php?varToPass="+varToPass; 
     </script> 
    <input type="button", value="displayPHP", onclick="passToPHP()"></input> 

    <?php 
     $tempVar = $_GET["varToPass"]; 
     echo("hello" . $tempVar); 
    ?> 

或通過創建一個簡單的形式

$('#frm').submit(function(e){ 
    var varToPass= "foo" 
    e.preventDefault(); 
    $(this).find('#varToPass').val(varToPass); 
    $(this).submit(); 
}); 

<form id ="frm" method="POST" action="/TraceExperiment/TraceExperiment.php"> 
    <input type="hidden" id="varToPass"/> 
    <input type="submit"/> 
</form> 
0

成功時不重定向到同一頁面。你得到的第二未定義的VAR進入該頁面

function passToPHP() { 
    $.ajax({ 
     type: "POST", 
     url: "/TraceExperiment/TraceExperiment.php", 
     dataType:text, 
     data: { 
      varToPass: "foo" 
     }, 
     success: function(data) { 
      console.log(data); 
     } 
    }) 
} 

嘗試做這樣的

,如果你想在html顯示消息

嘗試

success: function(data) { 
    $('body').append(data); 
} 
+1

。 php'頁面...只是一個想法 – Suyog

+0

謝謝Pekka。是的,正如Suyog所建議的那樣,我更喜歡重定向而不是簡單地打印出php文件的響應。 感謝您指出我正在嘗試去兩次頁面,導致未定義的變量。這就說得通了。 – Cam

0

你可以動態地在JavaScript中創建表單並提交它,而不是調用ajax並刷新頁面:

<script language="javascript"> 
     function passToPHP(){ 
      $('<form action="/TraceExperiment/TraceExperiment.php" method="POST"><input type="hidden" name="varToPass" value="foo" /></form>').appendTo('body').submit(); 
     } 
    </script> 
<input type="button" value="displayPHP" onclick="passToPHP()"></input> 
+0

啊,這很有趣。所以我實際上可以在javascript中創建一個表單並提交它。我想知道我是否可以編寫一個函數,該函數接受要提交的變量數組並動態創建此表單。 – Cam

+0

是的,您可以創建一個動態表單並使用數組創建輸入。 – Samir

0

有這個

  • 2溶液通過不同的方法

    由JavaScript生成的變量值,比使用

    寫在TraceExperiment.php

    function genratenumber(){ 
         return "number" 
        } 
         window.location.href= "/TraceExperiment 
        /TraceExperiment.php?yourvar="+genratenumber() 
        </script> 
        <?php  }else{ 
        // get the value of $_GET['yourvar'] 
        } ?> 
    

比使用$ _GET [ 'yourvar']相同的頁面

  • 上得到它通過使用您的計算策略

    你需要把在會話變量(在AJAX文件)不僅僅是你可以得到可變

+0

謝謝Shailendra。我想我會使用GET方法或POST表單方法,但可能會檢查出這個$ _SESSION的東西,因爲這也許是最合適的。 – Cam