2011-05-24 73 views
3

我想將一個javascript字符串傳遞給php ...在腳本中,代碼後面的WHICH是正確的。將一個Javascript字符串傳遞給PHP

<script type="text/javascript"> 
    var myvar = "mytext" ; 

<?php echo myvar ; ?> 
</script> 

這是行不通的。 我該怎麼辦?

+1

您顯然缺乏對PHP和JavaScript,服務器端和客戶端之間差異的理解。我建議你在編寫任何其他代碼之前仔細閱讀。 – Nick 2011-05-24 20:13:30

回答

11

當有人訪問一個網站,這通常是發生了什麼:

  1. 他們的瀏覽器向服務器發送一個請求。
  2. 服務器評估該請求。
  3. 服務器意識到「Egad,他們正在請求的頁面有PHP!」
  4. 服務器評估PHP,並只將結果發送到瀏覽器。
  5. 瀏覽器解析它收到的內容。
  6. 瀏覽器意識到,「我收到的頁面有JavaScript!」
  7. 瀏覽器完全在客戶機上評估JavaScript。

因此,PHP和JavaScript基本上處於不同的過程。只有服務器處理PHP,並且只有客戶端處理JavaScript。

「給」的字符串,以PHP,你必須使PHP頁面的請求,發送該字符串作爲GET變量:

http://www.yourdomain.com/some_php_page.php?myvar=mytext 

有幾種方式同做到這一點JavaScript的。

  1. 如果你只關心使PHP頁面上的要求,而且你不必擔心收到任何信息反饋,你可以創建一個圖像,並使用URL作爲源:

    var fakeImg = new Image(); 
    fakeImg.src = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext'; 
    

    即使您要求圖片,服務器也不知道,並且會通過調用PHP評估它來處理您的請求等。

  2. 您可以進行實際的AJAX請求。通過創建一個XMLHttpRequest對象開始:

    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
    

    有在IE中的一些問題與AJAX請求緩存響應,所以使獨特的網址:

    var url = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext&unique=whatever'; 
    

    告訴你XHR,你想讓它去的,你希望如何到達:

    xhr.open('GET', url, true); 
    // The "true" parameter tells it that we want this to be asynchronous 
    

    設置,將檢查,當接收到響應的方法:

    xhr.onreadystatechange = function() { 
        if (xhr.readyState === 4 && xhr.status < 400) { 
         success(xhr.responseText); 
        } 
    }; 
    

    最後,發送請求:

    xhr.send(null); 
    // We set "null" because some browsers are pissy 
    

    的一些注意事項要牢記:

    • 你必須建立自己的success功能,來處理字符串,你的PHP頁面會返回。
    • 如果您願意,您可以通過該功能xhr.responseXML,但這對我來說通常只是一個麻煩。
    • 使用onreadystatechange我有辦法將(我相信)介紹內存泄漏在IE瀏覽器的某些版本
+0

+1正確使用單詞「Egad」 – Ender 2011-05-24 20:24:39

5

PHP是執行服務器端,而JavaScript是客戶端,所以這意味着PHP已經在您發送您的JavaScript代碼時執行。

您可能想要考慮AJAX。

+0

好吧...我想不用ajax來做...但是你會如何用ajax做到這一點?代碼示例? – 2011-05-24 20:13:11

+1

@ mr.bio無法在PHP中使用JavaScript值(在同一頁上),因爲PHP已經執行了**。你需要發射另一個HTTP請求。 – Nick 2011-05-24 20:16:04

0

您應該清楚客戶端和服務器端代碼之間的區別。您在php代碼中引入的變量之前未分配,因爲該變量是在客戶端設置的。所以你的代碼示例本質上是錯誤的。如果您希望客戶端(javascript)中存在的值在服務器(php)中可用,則需要使用javascript的xmlhttprequest對象(也稱爲ajax)進行操作。

你可以通過其他方式,雖然...打印在JavaScript中的PHP值。這是因爲腳本不是由服務器端創建的,而是在瀏覽器正在處理之前發送給客戶端。

不知道你試圖達到什麼,但也許這有所幫助。

-1

你的例子是有點混亂:

<script type="text/javascript"> 
    var myvar = "mytext" ; 

<?php echo myvar ; ?> 
</script> 

因爲如果我這樣做:

<script type="text/javascript"> 
    <?php $myvar = "mytext"; ?> 
    var myvar = "<?php echo $myvar; ?>" ; 
</script> 

然後它設置的JavaScript值的PHP值爲$myvar,所以它們都保持不變。如果你想要做其他事情,你需要擴展你的例子。

相關問題