2012-04-20 171 views
0

我有一個JavaScript頁面,應該發送用戶名,用戶輸入到服務器上的PHP腳本。 javascript頁面來自http://192.168.1.4/login.html,它嘗試訪問http://192.168.1.4/GetInfo.php的php腳本。我認爲我無法從javascript頁面訪問php腳本中的用戶名,因爲firefox中的策略是相同的,但是我不確定如何確認這個懷疑,所以請原諒我,如果我錯了。我只是剛開始學習javscript和php。我想知道是否有不同的方式來傳遞這些信息。代碼如下。謝謝!PHP不從Javascript獲取信息jquery

的JavaScript:

<html> 
    <head> 
     <title>Login Page for SplitAuth</title> 
    </head> 
    <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 
    <script language="Javascript"> 
     function getUsername() 
     { 
      var username = window.prompt('Please Type Your Username'); 
      var temp = document.getElementById('temp'); 
      temp.innerHTML = username; 
      jQuery.ajax(
       { 
        type: "POST", 
        url:"GetInfo.php", 
        data: username, 
        success: function(msg) 
          {alert("data Saved: "+msg);} 

       });//ends the jQuery send 

     }//ends the GetUsername function 
    </script> 
    <body onLoad=getUsername()> 
     <div id="temp">This will show text</div> 
    <body> 

</html> 

PHP腳本:

<? 
$inFile="MyID.config.php"; 
$handle=fopen($inFile, 'r') or die ("No credentials could be gotten because the file MyID.config.php would not open."); 

echo $_POST['msg']; 

fclose($fh); 

?> 
+0

如果你在瀏覽器中訪問http://192.168.1.4/GetInfo.php,你會得到什麼? – jimw 2012-04-20 21:53:44

+0

是直接工作的PHP腳本? – 2012-04-20 21:54:33

+0

由於JavaScript運行客戶端,除非您運行ajax請求的機器是服務器本身,否則'192 ...'將不起作用。 'data:username'也是錯誤的 - 應該是'data:「username =」+ username'我想 - 但是你不會在PHP中引用它。你的PHP代碼毫無意義..很難說出你正在做什麼。 – 2012-04-20 21:55:11

回答

3

你應該預先考慮您的data:有 「味精=」。

... 
data: "msg="+username, 
... 

和的原因在於,jQuery.ajax預計查詢字符串或對象,這意味着

... 
data: {msg: username}, 
... 

也將工作。

看看jQuery.ajax Documentation。特別是data-section

+0

謝謝!這有效,但我想澄清一些事情。我認爲Javascript應該足夠聰明,以知道什麼時候變量是一個字符串,當它不是這樣時,我認爲有一個變量是一個字符串(或者我認爲)是足夠好的。 – tpar44 2012-04-20 22:10:58

+0

它是一個字符串是不夠的,它必須是一個查詢字符串。特別是一個帶有「msg」鍵和「username」內容的查詢字符串作爲值。密鑰必須是「msg」的原因是您的PHP代碼使用此密鑰。 – Kleist 2012-04-20 22:13:26

+2

你是對的,JavaScript是鬆散類型的,因此通常會根據您分配給變量的值選擇隱含的數據類型,但在這種情況下,它並不涉及變量的數據類型 - 它與服務器期望接收的內容有關,如果你想了解更多的細節,你可以在這裏閱讀querystrings:http://en.wikipedia.org/wiki/Query_string – jammypeach 2012-04-20 22:20:24

0

您正在使用POST方法,並且您發送的數據是錯誤的。您需要構建要發送的數據。用ajax方法來看看jquery頁面。這就是它對數據屬性所說的。

http://api.jquery.com/jQuery.ajax/

數據要被髮送到服務器。它被轉換成查詢字符串,如果還不是字符串的話。它附加到GET請求的url。請參閱processData選項以防止此自動處理。對象必須是鍵/值對。如果值是Array,那麼jQuery會根據傳統設置的值(如下所述)使用相同的密鑰對多個值進行序列化。

+0

可以有至少發佈的鏈接... – jammypeach 2012-04-20 22:16:37

-1

你的腳本應該看起來像這樣。

$.ajax({ 
    type: "POST", 
    url: "GetInfo.php", 
    data: "{name:"+ username + "}" 
    }).done(function(msg) { 
alert("Data Saved: " + msg); 
}); 

而你的php腳本沒有得到用戶名值。您的$ _POST ['msg']中使用的「msg」將不會提示,因爲它沒有任何價值。 「msg」變量旨在將返回值的值存儲到您的html頁面。我會推薦你​​閱讀更多來自www.jquery.com

+0

減去反推我假設? – jammypeach 2012-04-20 22:24:46

+0

實際上等了一個月,ajax調用中'data'的值對我來說看起來是錯誤的。這是一個字符串,而不是一個對象。不認爲這會起作用。 – jammypeach 2012-04-20 22:25:51

+0

@jammypeach,反引號不是腳本的一部分。上述腳本中唯一需要的對象是用戶名,標籤可以作爲字符串傳遞。再次想到,「$ .Ajax」不適用於發佈表單,您應該使用「$ .Post」。 – Peter 2012-04-20 22:32:45