【问题标题】:Passing this javascript object from jQuery to PHP?将这个 javascript 对象从 jQuery 传递给 PHP?
【发布时间】:2014-03-25 20:15:11
【问题描述】:

此问题源于this thread

我已按照下面的答案进行操作,但在将对象传递给 PHP 时遇到了问题。我认为这只是一个小问题,但我找不到它。

我的 ajax 调用

 $('.actResult').click(function() {
        var result = {};
        $('.actResult tr').each(function(){
            var $tds = $(this).find('td');
            result[$tds.eq(0).html()] = $tds.eq(1).text();
        });
        console.log(result);
        $.ajax({
            type: 'get',
            url: 'userpage.php',
            data: result
        });
        $('.FindResults').dialog("close");
    });

在 userpage.php 中,我使用的是这个:

echo '<div id="data"><pre>', var_dump($_GET), '</pre></div>';

我可能需要使用 stringify 或 json_decode,但 this source 告诉我进行 ajax 调用就足够了。

输出给了我一个

array(0){
}

这很奇怪。该数组打印到控制台中,因此可以正确生成。控制台还告诉我 ajax 执行成功。我使用 $_GET 只是因为 $_POST 已经有很多变量,因此检查 $_GET 是否有此请求会更容易。

更新:

从下面的 cmets 来看,当查询成功时,ajax 调用不会做任何事情。所以我改变了电话:

$.ajax({
            type: 'get',
            url: 'userpage.php',
            data: result,
            success: function(){
                $('#data').text( data );
            }
        });

还有 PHP

echo '<input type="text" id="data" /><pre>', var_dump($_GET), '</pre>';

我尝试使用 div 而不是文本框。结果仍然是 array(0){}

【问题讨论】:

  • 什么不起作用?
  • @undefined echo 可以接受多个参数,以逗号分隔。这相当于将它们连接成一个字符串并将它们作为单个参数传递。见php.net/echo
  • 我得到一个数组 (0){} 结果。是的,我喜欢回声。对于字符串变量,我使用.
  • @markovchain 您正在构建一个 javascript 对象而不是数组。
  • 您在哪里看到 PHP 的输出? $.ajax 调用似乎没有响应回调。如果您使用浏览器的开发工具(或 Firebug 或类似工具),您能否看到请求 URL 构造正确?

标签: javascript php jquery ajax arrays


【解决方案1】:
$.ajax({ 
   type       : "GET",  
   data       : { result : JSON.stringify(result) },  
   dataType   : "html",  
   url        : "userpage.php",  
   beforeSend : function(){ },
   success    : function(data){ console.log( data ) },
   error      : function(jqXHR, textStatus, errorThrown) { }
});

在你的 php 中

echo '<div id="data"><pre>'. $_GET["result"] .'</pre></div>';

【讨论】:

  • 这里的dataType是html,不是json。
  • 它不会像这样在 PHP 中打印结果。这次它打印的是 NULL 而不是空数组。我也尝试用 html 替换 dataType。它将整个页面的 html 代码打印到控制台中,并且可以正常工作。它确实显示在控制台上。
  • @markovchain 尝试不使用 var_dump(),我已经更新了我的答案。
  • @markovchain 您在 echo 时也有语法错误,请将 ',' 替换为 '.'
  • . 对我来说很好......但是这段代码有效!我现在得到了结果对象的正确 json 版本。谢谢!
【解决方案2】:
  $.ajax({
    type: 'GET',
    url: 'userpage.php',
    data: result,
    dataType : 'json',
    success: function(data){
     console.log(data);
   },
   error: function(jqXHR, textStatus){
    console.log(jqXHR);
     console.log(textStatus);
  }
});
  • 查看控制台日志并检查问题...

userpage 上的另一件事是这样使用的:

echo json_encode($_GET);

【讨论】:

    【解决方案3】:

    你知道吗,我在这里很冒险,并且胡乱猜测。

    我认为你在骗我们。

    根据您问题中的这句话:I'm using $_GET just because $_POST already has so many variables

    您正在执行 POST,而不是 GET。如果您发送 GET,为什么 $_POST 会包含 任何内容

    从此更改您的 ajax

        $.ajax({
            type: 'post',
            url: 'userpage.php',
            data: result
        });
    

    到这里

        $.ajax({
            type: 'get',
            url: 'userpage.php',
            data: result
        });
    

    【讨论】:

    • 如果这是错误,那将是一种解脱,但不幸的是不是
    • 你能解释一下为什么 $_POST 里面有任何东西吗?
    • 页面基本上是大表格,这里的结果对象的信息来自哪里。
    • 我以为 userpage.php 只是 echo '&lt;div id="data"&gt;&lt;pre&gt;', var_dump($_GET), '&lt;/pre&gt;&lt;/div&gt;';。这不是大表格。
    • 不,这不是整个 userpage.php。但是其他代码与问题无关,所以我没有显示它,例如用于连接到数据库的代码等。还有一个隐藏的输入字段,令牌来自于保护目的。我只是想将 ajax 调用的结果打印到同一页面中。
    猜你喜欢
    • 2011-09-15
    • 2012-07-30
    • 1970-01-01
    • 2017-10-07
    • 2014-10-07
    • 2012-01-10
    • 2014-06-12
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多