2012-04-20 167 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