【问题标题】:PHP Not Getting Information from Javascript JqueryPHP没有从Javascript Jquery获取信息
【发布时间】:2012-05-02 12:00:48
【问题描述】:

我有一个 javascript 页面,它应该将用户输入的用户名发送到服务器上的 php 脚本。 javascript 页面来自http://192.168.1.4/login.html,它尝试访问http://192.168.1.4/GetInfo.php 的php 脚本。我认为我无法从 javascript 页面访问 php 脚本中的用户名,因为 Firefox 中的源策略相同,但是我不确定如何确认这种怀疑,所以如果我错了,请原谅我。我才刚刚开始学习 javscript 和 php。我想知道是否有不同的方式来传递这些信息。代码如下。谢谢!

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);

?>

【问题讨论】:

  • 在浏览器中访问192.168.1.4/GetInfo.php会得到什么?
  • php 脚本可以直接运行吗?
  • 由于 javascript 运行客户端,192... 将无法工作,除非您运行 ajax 请求的机器是服务器本身。 data: username 也是错误的——我认为应该是data: "username=" + username——但是你也没有在 PHP 中引用它。你的 PHP 代码完全没有意义。很难说你在做什么。
  • 让人想知道..那篇文章的年龄,您从该文章中复制粘贴了脚本
  • @tereško 实际上是我自己写的,因为我说我正在学习,所以下次或者发表这样愚蠢的评论,说些建设性的东西,或者什么都不说

标签: php javascript jquery same-origin-policy


【解决方案1】:

您应该在data: 前面加上“msg="。

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

原因是jQuery.ajax 需要一个查询字符串或一个对象,这意味着

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

也可以。

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

【讨论】:

  • 谢谢!那行得通,但我想澄清一些事情。我认为 Javascript 应该足够聪明,可以知道变量何时是字符串,何时不是字符串,我认为拥有一个字符串变量(或者我认为)就足够了。
  • 它是一个字符串是不够的,它必须是一个查询字符串。特别是一个以msg 键和username 的内容作为值的查询字符串。密钥必须是 msg 的原因是您的 PHP 代码使用了这个密钥。
  • 你说得对,javascript 是松散类型的,因此通常通过分配给变量的值来选择隐含的数据类型,但在这种情况下,这与变量的数据类型无关 - 它是关于服务器期望接收的内容,如果您想了解更多详细信息,可以在此处阅读查询字符串:en.wikipedia.org/wiki/Query_string
  • 谢谢,我没有意识到我正在构建“?”之后的 URL 部分这显然表示正在发送的变量。感谢您的帮助!
【解决方案2】:

您正在使用 POST 方法并且您发送的数据是错误的。您需要构建要发送的数据。看看 ajax 方法中的 jquery 页面。这就是它所说的数据属性。

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

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。如果值是一个数组,jQuery会根据传统设置的值(如下所述)序列化多个具有相同键的值。

【讨论】:

    【解决方案3】:

    您的脚本应该如下所示。

     $.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 阅读更多内容

    【讨论】:

    • 减去我假设的反引号?
    • 实际上等一下,ajax 调用中data 的值在我看来是错误的。那是一个字符串,而不是一个对象。不认为这会奏效。
    • @jammypeach,反引号不是脚本的一部分。上面脚本中唯一需要的对象是用户名,标签可以作为字符串传递。再想一想,“$.Ajax”不是用来发布表单的,​​你应该使用“$.Post”。
    • 抱歉,这是不对的。此处的花括号:"{name:"+ username + "}" 导致请求看起来像这样(例如,如果它是 GET):someUrl.com?{name:value},这不是一个有效的请求。当您调用 ajax 函数时,data 的输入必须是对象或有效的查询字符串,而不是看起来像对象的字符串。不相信我吗?阅读:api.jquery.com/jQuery.ajax
    • @jammypeach 感谢您的更正。这是一个忽略错误。
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-07-14
    相关资源
    最近更新 更多