【问题标题】:JavaScript value not being received by PHPPHP 未接收到 JavaScript 值
【发布时间】:2013-12-26 16:11:15
【问题描述】:

我编写的程序有问题。这个想法是我单击一个链接,然后在 JavaScript 变量中获取链接的值。然后我执行一个 GET 请求,将值发送到 PHP 变量并打印出来。

代码如下:

HTML

<html>
    <head>
        <script src= "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    </head>
    <body>
        <div id='mydiv'>
            <a href='/codeigniter/index.php/hashtest/hi'>Link 1</a>
            <a href='/codeigniter/index.php/hashtest/hi'>Link 2</a>
        </div>
    </body>
</html>

jQuery(在上述正文中的&lt;script&gt; 标记中)

$(function()
{
    var mydiv = $('#mydiv');
    mydiv.on('click', 'a', function(){
        var text = $(this).text();
        console.log(text);
        //$.get("hashtest.php", {qwerty: text});
        $.ajax
        ({
            url: "/codeigniter/index.php/hashtest/hi",
            data: {
                qwerty : text
            },
            async: "false",
            success: function(data){
                console.log("success!");
            },
            error: function(jqXHR, status, error)
            {

                alert("Status : " + status + " error: " + error); 
            }   
        });
    });
});

PHP

class Hashtest extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    public function hi() {
        $x = $this->input->get('qwerty');
        print $x;
        print "";
    }

}

错误:

NS_ERROR_NOT_AVAILABLE: prompt aborted by user

目前,JavaScript 正确地获取了正确的链接值,因为 console.log() 行为两个链接输出了正确的内容。但似乎 PHP 没有收到这个值,因为没有打印出来。我试过用硬编码的字符串替换变量,但没有区别。我可以从上面的方法中打印静态 PHP,所以我认为这不是我无法打印任何 PHP 的问题。

几点:

  • 我使用 $.ajax 而不是 $.get 只是为了查看会出现什么错误消息 出现(理想情况下我想使用 $.get )。好像有点 根据我对上述内容的阅读,某种未捕获的异常 错误消息以及出现的警告框没有 显示错误消息,只是“错误”状态。

  • 我不指望任何回报,成功的方法就在那里 查看请求是否正常(目前不是)

  • 我假设链接的 id 是未知的。

  • 代码都在同一个类和我指向的 URL 中 到 AJAX 请求中是正确的(我在我的 浏览器控制台)。

  • PHP 是使用 CodeIgniter 框架编写的。

【问题讨论】:

    标签: javascript php jquery html ajax


    【解决方案1】:

    你需要阻止默认的点击链接:

    $(function()
      {
          var mydiv = $('#mydiv');
          mydiv.on('click', 'a', function(e){
              e.preventDefault(); // <-- THIS IS NEEDED
              var text = $(this).text();
              console.log(text);
              //$.get("hashtest.php", {qwerty: text});
              $.ajax
              ({
                  url: "/codeigniter/index.php/hashtest/hi",
                  data: {qwerty : text},
                  async: "false",
                  success: function(data){
                      console.log("success!");
                  },
                  error: function(jqXHR, status, error)
                  {
    
                      alert("Status : " + status + " error: " + error); 
                  } 
              });
          });
      });
    

    【讨论】:

    • 添加删除错误并且代码通过“成功”方法而不是“错误”方法但PHP仍然不会打印。
    • 您希望它在哪里打印? PHP 的输出在data 中,而你没有用它做任何事情。
    • OK,出于某种奇怪的原因,data 包含所有的 HTML、jQuery 和 PHP。 $x 变量现在确实包含正确的值,但是当我尝试打印它时它仍然没有显示在浏览器上。
    • 除非你把它放在那里,否则它不会显示在浏览器中,例如$("#somediv").text(data).
    • 该死!你是对的。忘记了 print 语句只是为了向 JavaScript 返回一些东西。仍然没有解释为什么数据包含所有的 HTML、jQuery 和 PHP。当我使用text() 方法时,它自然会输出到浏览器。
    【解决方案2】:

    你的代码是正确的,但是当你点击链接时你没有停止事件。

    添加 e.preventDefault();

    var mydiv = $('#mydiv');

     mydiv.on('click', 'a', function(e){
                          e.preventDefault();
                          var text = $(this).text();
    
          代码>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多