2013-10-04 82 views
2

這是我的代碼的一部分,以顯示我的頁面上的專輯。如果我打電話這樣的功能調用函數與參數作爲字符串不工作

<?php 
    for ($key_Number = 0; $key_Number < count($album); $key_Number++) { 
    echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery("gallery1)">Gallery1</a><br>'; 
    } 
    ?> 

<script type="text/javascript">ajax_json_gallery('gallery1');</script> 

它工作正常。 gallery1是我的服務器上的一個文件,裏面有測試照片。如果我這樣稱呼它

<?php 
    for ($key_Number = 0; $key_Number < count($album); $key_Number++) { 
    echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery($album[$key_Number])">'.$album[$key_Number].'</a><br>'; 
    } 
    ?> 

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script> 

它不起作用。我究竟做錯了什麼?有任何想法嗎? 我需要根據用戶傳遞不同的字符串,所以我需要給它一個變量。 是的,我的數組$相冊包含正確的文件夾名稱。

這裏是被調用的函數。

<script type="text/javascript"> 

function ajax_json_gallery(folder){ 
    var thumbnailbox = document.getElementById("thumbnailbox"); 
    var pictureframe = document.getElementById("pictureframe"); 
    var hr = new XMLHttpRequest(); 
    hr.open("POST", "json_gallery_data2.php", true); 
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    hr.onreadystatechange = function() { 

     if(hr.readyState == 4 && hr.status == 200) { 
      var d = JSON.parse(hr.responseText); 
      pictureframe.innerHTML = "<img src='"+d.img1.src+"'>"; 
      thumbnailbox.innerHTML = ""; 

      for(var o in d){ 
       if(d[o].src){ 
       thumbnailbox.innerHTML += '<div onclick="putinframe(\''+d[o].src+'\')"><img src="'+d[o].src+'"></div>'; 
       } 
      } 
     } 
    } 
hr.send("folder="+folder); 
thumbnailbox.innerHTML = "requesting..."; 
} 

function putinframe(src){ 
    var pictureframe = document.getElementById("pictureframe"); 
    pictureframe.innerHTML = '<img src="'+src+'">'; 
} 

這裏是獲取頁面中的照片json_gallery_data2.php

<?php 

header("Content-Type: application/json"); 
$folder = $_POST["folder"]; 
$jsonData = '{'; 
$dir = $folder."/"; 
$dirHandle = opendir($dir); 
$i = 0; 

while ($file = readdir($dirHandle)) { 
    if(!is_dir($file) && preg_match("/.jpg|.gif|.png/i", $file)){ 
     $i++; 
     $src = "$dir$file"; 
     $jsonData .= '"img'.$i.'":{ "num":"'.$i.'","src":"'.$src.'", "name":"'.$file.'" },'; 
    } 
} 
closedir($dirHandle); 
$jsonData = chop($jsonData, ","); 
$jsonData .= '}'; 
echo $jsonData; 
?> 
+0

你可能想試試這個 '回聲「'.$album[$key_Number].'
」;' – sulavvr

+0

使用一些先進的事件註冊方法 –

回答

0

1:

$key_Number varibale在該行的服務器上:

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script> 

包含count($album)價值,這不存在在數組中。


第二:

如果你在這一行試圖輸出PHP值:

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script> 

然後嘗試在<?php ?>標籤封裝輸出:

<script type="text/javascript">ajax_json_gallery('<?php echo $album[$key_Number]; ?>');</script> 

3:

單引號不允許在字符串解析變量。

echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery($album[$key_Number])">'.$album[$key_Number].'</a><br>'; 

這個^行不符合你的期望。

嘗試使用雙引號:

echo "<a href=\"#\" onclick=\"return false\" onmousedown=\"ajax_json_gallery({$album[$key_Number]})\">{$album[$key_Number]}</a><br>"; 
+0

謝謝你的更正,它的效果非常好!我非常讚賞完整的代碼示例。 – JeffK

+0

@JeffK很高興幫助。如果此頁面上的任何投訴有助於解決您的問題,那麼您可以接受它作爲解決方案。祝你好運。 – BlitZ

+0

在第二個我用$專輯[0]顯示第一張專輯作爲默認。再次感謝 – JeffK

1

這是混合服務器端和客戶端代碼:

ajax_json_gallery($album[$key_Number]); 

變量$album$key_number沒有在JavaScript中定義,所以它不能使用它們。 (我確定當它「不工作」時,它實際上告訴你在JavaScript控制檯上這些變量沒有被定義)。

要從PHP發出值,你需要用<?php ?>標籤包圍它們。另外,由於它是JavaScript中的一個字符串,因此它需要在JavaScript中用引號引起來。事情是這樣的:

ajax_json_gallery('<?php echo $album[$key_Number]; ?>'); 
+1

他試圖使用PHP變量在他的JS代碼,據我所見。另外,在'echo'語句中不需要使用''標籤。 –

+0

@AmalMurali:我沒有在echo語句中使用PHP標籤,但是對OP代碼的第二次檢查看起來好像有兩次*這個JavaScript函數調用。一個在循環內部(在echo語句中),另一個在循環外部。循環之外的一個需要我描述的內容,但我也不認爲循環值將在該上下文中可用。 OP的代碼似乎有幾個錯誤。 – David