簡體   English   中英

將PHP變量作為字符串傳遞給javascript

[英]Passing PHP variables as strings to javascript

不知何故,我的php函數,它創建一個調用javascript函數的按鈕,不會將php變量作為字符串傳遞。

function addTableEntry($id, $name)
{
    echo('<tr>
              <td>'.$id.'</td>
              <td>'.$name.'</td>
              <td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>
              </tr>');
}

addTableEntry(1,"livingroom");

只要單擊它,函數activateGroupSettingsOverlay()就會被(1,livingroom)調用,並且我得到一個錯誤“livingroom is undefined”。

如何將$ name作為String傳遞? 我試圖在它周圍加上引號(像這樣: '.$id.',"'.$name.'" ,但這不起作用。

如果你希望它們持久存在,你必須在字符串中“轉義”引號:

echo '..... onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"....'

重要的是(單個)引號之前的反斜杠。

它不起作用的原因是因為你沒有在javascript中包含引號。

雖然其他答案“修復”了他們沒有真正解釋的問題,但要清楚這一點

  <td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>

輸出是這樣的

  <td><a href="#groups" onClick="activateGroupSettingsOverlay(1,livingroom)">Manage group</a>

livingroom沒有報價,因此javascirpt將其視為變量,因此未定義錯誤。 要修復它,你希望它在輸出時看起來像這樣。

  <td><a href="#groups" onClick="activateGroupSettingsOverlay(1,'livingroom')">Manage group</a>

您需要更改此行

  <td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')">Manage group</a>

使用轉義添加單引號\\'

就個人而言,我喜歡使用所謂的HEREDOC或NEWDOC <<<HTML HTML; <<<'HTML' HTML; 各自。 HEREDOC就像使用"和新文檔就像使用'一樣,你不能在NEWDOC中使用php變量,但如果你將它們括在{ }大括號中,你可以在HEREDOC內。因此我們會想要使用HEREDOC我們可以在輸出中使用php變量。

function addTableEntry($id, $name)
{
    echo <<<HTML 
        <tr>
            <td>'.$id.'</td>
            <td>'.$name.'</td>
            <td><a href="#groups" onClick="activateGroupSettingsOverlay({$id},'{$name}')">Manage group</a>
        </tr>
HTML;
}

addTableEntry(1,"livingroom");

http://php.net/manual/en/language.types.string.php - 向下滾動到HEREDOC所在的HEREDOC

這樣做的好處是你不必轉義單引號,這使得IMO更具可讀性。 HEREDOC或NEWDOC的訣竅是結束HTML; 必須開始一個新的行,可能是該行唯一的東西,沒有前導或尾隨空格,或它將無法正常工作..

對於這種情況,它可能很簡單,可以逃脫你如何做,但如果你需要在javascript中使用連接,引號將變得麻煩。 例如,假設您想使用帶有javascirpt變量的javascript為圖像名稱添加html圖像標記,但使用php獲取服務器主機名(html和javascript中的變量)。

 echo '
      var foo = "image.jpb";
      $(body).html( \'<img src="'.$_SERVER['HTTP_HOST'].'\'+foo+\'" />\' );
 ';

這很快就變得難以管理,因為(不管怎么說,不管怎樣我都沒有這個權利)。 比較這是多么清潔,因為你不是在浪費PHP中的引號....

echo <<<HTML
     var foo = "image.jpb";
          $(body).html( '<img src="{$_SERVER['HTTP_HOST']}'+foo+'" />' );
HTML;
Please try with this code:-

function addTableEntry($id, $name)
{
    echo("<tr>
              <td>".$id."</td>
              <td>".$name."</td>
              <td><a href=\"#groups\" onClick=\"activateGroupSettingsOverlay($id,'$name')\">Manage group</a>
              </tr>");
}

addTableEntry(1,"livingroom");

更改

onClick="activateGroupSettingsOverlay('.$id.','.$name.')"

onClick="activateGroupSettingsOverlay('.$id.',"'.$name.'")"

@chandresh_cool是對的,你必須“強制”引號

onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM