【问题标题】:AJAX jQuery PHP Return ValueAJAX jQuery PHP 返回值
【发布时间】:2012-11-13 18:06:24
【问题描述】:

我是 AJAX 的新手,对 PHP 传递回 jQuery 的内容有点困惑。 所以你有一个像这样的 AJAX 函数:

 $.ajax({ url: '/my/site',
     data: {action: 'test'},
     type: 'post',
     success: function(output) {
                  alert(output);
              }
 });

(我是从另一个 StackOverflow 页面的 ajax 中获取的。)

但在其他各种资源上,他们的成功部分将如下所示:

 success: function(data) {functionfoocommandshere}

我只是对这个变量的命名方式感到困惑?如果 PHP 最终回显一个数组:

  echo $myVar;

我怎样才能从 AJAX 获得这个?

【问题讨论】:

  • success 方法的 data 变量将保存您在 PHP 中 echo 的任何内容。您不能直接传递数组;您必须先将其转换为 JSON。
  • 你对哪个变量的命名感到困惑?
  • 包含返回php信息的变量。所以就无所谓了吗? .ajax 命令会知道 function() 参数中的任何内容都返回 php 信息?
  • 另外:你可以在 PHP 中使用 echo 数组,你可以使用 print_rvar_dumpserialize 它,但 echo 用于字符串或整数等。

标签: php jquery ajax


【解决方案1】:

Ajax-Requests 获取整个站点。因此,您不会在变量中获得任何数据,而是在数据参数中获得整个站点。您一起制作的所有回声都将在此参数中。如果你想检索一个数组,你应该先把它转换成json。

echo json_encode($myArray);

那么就可以通过这种方式通过Ajax接收了

$.ajax({ url: '/my/site',
 data: {action: 'test'},
 dataType: 'json',
 type: 'post',
 success: function(output) {
              alert(output);
          }
 });

【讨论】:

  • 你真的需要echo这个值吗?如果您不想显示output 怎么办? @Gnietschow
  • echo 不向用户显示任何内容,它仅在服务器的响应中写入数据,因此将其发送到客户端。 ajax 调用收到output 后,是否向用户显示此响应由您决定。
【解决方案2】:

在您的 PHP 文件中,使用 json_encode 将数组转换为更方便的格式,以便在 Javascript 中使用。所以你会有类似的东西:

echo json_encode($myArray);

然后,在您的 JavaScript 中,success 方法的 data 变量将保存 JSON。使用 jQuery 的 parseJSON 将其转换为 JavaScript 对象,这样就很容易操作了。我不知道你的数组包含什么,但你可能会这样做:

$.ajax({ url: '/my/site',
    data: {action: 'test'},
    type: 'post',
    success: function(data) {
        var obj = jQuery.parseJSON(data);
        alert(obj.name[0] === "John");
      }
});

同样,这里的 data 变量将包含您的 PHP 输出的任何内容,但 JSON 是一种将数据传回 JavaScript 的常用且方便的方式。

【讨论】:

    【解决方案3】:
    <script type="text/javascript">
    $.ajax({
        url: '/my/site',
        data: {action: 'test'},
        type: 'post',
        success: function(output) {
            alert(output);
        }
     });
    </script>
    
    <?php
    $action = $_POST['action'];
    echo $action;?>
    

    任何打印/回显的输出都将返回到成功函数。当您想用需要实时运行的内容填充 html 容器时,这很方便。

    一旦你掌握了这个窍门,另一个选择是使用 JSON 来返回带有值的变量。

    【讨论】:

    • 它正在检索完整的 html 格式,我只想返回值
    【解决方案4】:

    从 PHP AJAX 函数返回的数据可以从 success 块中检索。这是manual

     $.ajax({ url: '/my/site',
     data: {action: 'test'},
     type: 'post',
     dataType: 'json',
     success: function(output) {
         //output is the data returned from PHP AJAX function in JSON format
         alert(output); 
       }
     });
    

    【讨论】:

    • 所以没关系? .ajax 命令会知道 function() 参数中的任何内容都返回 php 信息?
    • 这不是“知道”的问题,它是.ajax描述的一部分:成功函数接收返回的数据作为参数。
    • -1 你不能自动保证你的 ajax 调用会知道传递的 JSON 实际上是 json ......而 Jquery 不是在处理 PHP,它是在处理数据(记住,PHP在输出到屏幕之前被解释,JQuery 可以访问数据)默认情况下,它会尝试最好的猜测,这不保证是 JSON。这就是为什么最佳实践是定义数据类型(可以是 json、text、jsonp、html 等),然后将其作为成功函数的返回值。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2011-09-21
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多