2014-07-23 63 views
1

我正在編寫一些代碼,該代碼在JavaScript中必須傳遞到同一文檔中的PHP腳本中。用戶輸入將被用於從某個外部站點中刪除。將變量從JavaScript傳遞到PHP無頁面刷新

JavaScript變量是HtmlLink,它需要傳遞到PHP代碼,它表示INSERT HTMLLINK VARIABLE HERE而不重新加載頁面。

<!DOCTYPE HTML> 
<HEAD> 
    <TITLE>Test Input</TITLE> 
    <SCRIPT> 
     type = "text/javascript" 
     function testResults (form) { 
     var TestVar = form.inputbox.value + ".html"; 
     var HtmlLink = "www.mp3skull.com/mp3/" + TestVar; 
     document.write(HtmlLink); 
     } 
    </SCRIPT> 
    <?php 
     $contents = file_get_contents('INSERT HTMLLINK VARIABLE HERE'); 
     $dom = new DOMDocument(); 
     libxml_use_internal_errors(true); 
     $dom->loadHTML($contents); 
     libxml_clear_errors(); 
     $xpath = new DOMXpath($dom); 

     $element = $xpath->query('//div[@id="right_song"]/div[3]/div[1]/div[1]/a')->item(0)-      
     echo $element; 
    ?> 
</HEAD> 
<BODY> 
    <FORM NAME="myform" ACTION="" METHOD="GET"> Song Name <BR> 
     <INPUT TYPE="text" NAME="inputbox" VALUE=""><P> 
     <INPUT TYPE="button" NAME="button" Value="Search" onClick="testResults(this.form)"> 
    </FORM> 
</BODY> 
</HTML> 
+0

我本來認爲讓這樣的事情發生會打開你要允許任何人以任何加載文件,他們希望,你的PHP用戶可以訪問到那裏? IE瀏覽器。壞事 – Klors

+0

感謝您的回覆,但是如何將我的服務器打開到加載任何服務器文件的用戶/客戶端? – user3865450

+0

可以將javascript函數設置爲任何用戶將路徑更改爲任何他們想要的內容。您最好在PHP代碼中使用主路徑,並簡單地將歌曲名稱作爲變量。從長遠來看,你可能會變得更好,把它變成ajax呼叫。 – Klors

回答

1

如果你想做一些搜索,首先建立正確的URL首先,然後從那裏搜索/抓取網站,實際上基本代碼已經在工作,所以它的時間來建立。你可以做這樣的事情:Sample Demo

$main_url = 'http://www.mp3skull.com/mp3/'; 
$results = array(); 

if(isset($_POST['submit'])) { 
    // handle input (sample: hot mallets) 
    $input = preg_replace('/[\s]+/', '_', strtolower(trim($_POST['input']))); 
    $main_url .= $input . '.html'; // turns to hot_mallets.html 

    $contents = @file_get_contents($main_url); 
    if($contents !== false) { // simple error checking 

     $dom = new DOMDocument(); 
     libxml_use_internal_errors(true); 
     $dom->loadHTML($contents); 
     libxml_clear_errors(); 
     $xpath = new DOMXpath($dom); 

     $search_results = $xpath->query('//div[@id="song_html"]'); 
     if($search_results->length > 0) { 
      foreach($search_results as $result) { 
       // each row result, put it inside the array 
       $results[] = $xpath->query('//div[@id="right_song"]/div[3]/div[1]/div[1]/a', $result)->item(0)->getAttribute('href'); 
      } 
     } else { 
      echo 'Zero results'; 
     } 


    } else { 
     echo 'Some error on getting results from external site.'; 
     exit; 
    } 
} 

?> 

<form method="POST"> 
    <label for="inputbox">Song Name: <input type="text" id="inputbox" name="input"/ ></label> 
    <input type="submit" name="submit" /> 
</form> 
<?php if(!empty($results)): ?> 
<h3>Search Results:</h3> 
<ul> 
    <?php foreach($results as $result): ?> 
     <li><?php echo $result; ?></li> 
    <?php endforeach; ?> 
</ul> 
<?php endif; ?> 
0

由於的頁面加載的網頁這並沒有真正意義的大部分設置在路上。 PHP在服務器上運行,將JavaScript和HTML發送到客戶端,然後在客戶端上執行JavaScript。在這個過程中,爲了在php中設置一個變量,爲時已晚,因爲php已經完成加載。你可以使用Ajax從JavaScript發送請求。如果你這樣做,頁面會像這樣加載:

(服務器給客戶端初始HTML/javascript/CSS) - >(客戶端運行javascript,向服務器發出請求(在用戶輸入數據後)) - > (外部請求返回的結果,現在可以通過javascript使用)。

儘管如此,你並不需要這麼做 - 從另一頁面獲取鏈接。你應該真正做的是用php寫你的javascript的東西,然後回顯鏈接。然後,設置表單以提交回同一頁面。這裏有一個例子:

<!doctype html> 
<head> 
    <title>Fetch Link</title> 
</head> 
    <body> 
     <?php 
      ini_set('display_errors', 0); 
      if (isset ($_GET['search_term'])) 
      { 
       $searchTerm = $_GET['search_term']; 
       $searchPage = "http://www.example.com/".$searchTerm.'.html'; 
       $searchPageContents = file_get_contents($searchPage); 
       $feedBack = ''; 
       $failedMessage = 'Sorry, we couldn\'t match your search =('; 

       if ($searchPageContents !== FALSE) 
       { 
        $searchPageDom = new DOMDocument(); 

        if (!$searchPageDom->loadHTML($searchPageContents)) 
         $feedBack = $failedMessage; 
        else 
        { 
         $searchPageXpathWrapper = new DOMXpath($searchPageDom); 
         $searchLinkNode = $searchPageXpathWrapper 
         ->query('SOME QUERY HERE') 
         ->item(0); 

         $searchLink = $searchPageDom->saveHTML ($searchLinkNode); 
         $feedBack = $searchLink; 
        } 
       } 
       else 
        $feedBack = $failedMessage; 

      } 
      else 
       $feedBack = 'Please enter a search term'; 

      echo $feedBack.'<br>'; 
     ?> 
     <form name="myform" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="GET"> 
      <label for='search_name' for='search_term'>Search Term</label> 
      <input type="text" name="search_term"> 
      <input type='submit' value='Search'> 
     </form> 
    </body> 
</html> 

當然,除非你有一個特別好的理由抓取網頁中的鏈接,而不是隻生成鏈接自己 - 你可以生成自己以最小的JavaScript的鏈接並保存輪訪問服務器並防止另一端頁面格式更改的可能性。