如何使用调用PHP脚本的AJAX接收数组?

时间:2017-08-09 14:55:48

标签: javascript php jquery ajax autocomplete

基本上我正在做的是使用AJAX自动填充文本框以从调用C函数的PHP脚本中获取信息。

这是我在理论上发现的:(假设只接收一个值)

$(document).ready(function(){
    window.setInterval(function(){
        var ajaxurl = 'php/portserverclient.php',
        $.post(ajaxurl, NULL, function (response) {
            $('#v1').val(response); 
        });
    }, 5000);
});

现在,如果这有效,我相信它会。如果我收到一个值数组,那么函数内部的输入不能响应,对吗?那么我需要更改它以使其成为一个数组?

为了清楚起见,我的PHP脚本正在使用echo来输出其信息。我宁愿输出更多的标准"在V1 = 120,V2 = 120等方面的方式,但PHP对我来说是新的,我正在研究。谢谢。

修改 只是为了让它更清晰

这样的事情会起作用吗?

$(document).ready(function(){
    window.setInterval(function(){
        var ajaxurl = 'php/portserverclient.php',
        $.post(ajaxurl, NULL, function (response[]) {
            $('#v1').val(response[0]);
            $('#v2').val(response[1]);
            $('#v3').val(response[2]);
        });
    }, 5000);
});

4 个答案:

答案 0 :(得分:1)

由于您在PHP端echo,响应只能是一个字符串 但是如果该字符串形成为有效的JSON,您将能够像您希望的那样使用它。

所以在PHP方面,确保json格式有效:

$array = [120,340,800];

echo json_encode($array);

然后在JS中......你收到了一个字符串......你必须解析它才能使它成为一个数组。

$(document).ready(function(){
  window.setInterval(function(){
      var ajaxurl = 'php/portserverclient.php',
      $.post(ajaxurl, NULL, function (response[]) {
          var responseArray = JSON.parse(response);
          $('#v1').val(responseArray[0]);
          $('#v2').val(responseArray[1]);
          $('#v3').val(responseArray[2]);
      });
  }, 5000);
});

答案 1 :(得分:0)

根据OP更新,您可以尝试这样的方法将数组的每个项目映射到您可以执行的相应文本框。

    $.post(ajaxurl, NULL, function (response) {
        for (var i = 0; i < response.length; i++) {
            $("#v" + (i + 1)).val(response[i]);
        }
    });

这会将从JSON端点返回的数组的每个索引映射到相应的文本框。

如果从端点返回的JSON是有效的JSON数组,那么您的响应变量应该已经是一个数组了!

答案 2 :(得分:0)

最简单的方法(对我来说)在javascript和PHP之间进行通信是JSON。 因此,您的PHP脚本必须以此格式生成答案。

PHP代码

// At the top of your PHP script add this
// that will tell to your browser to read the response as JSON
header('Content-Type    : application/json', true); 
// Do your logic to generate a PHP array
echo json_encode($yourArray);

HTML代码

<div class="someClass"></div>

Javascript代码

var container = $('.someClass');
$.post(ajaxurl, NULL, function (response) {
    console.log(response); // for debuging
    for (let i = 0; i <= response.length; i++) {
        let myItem = response[i];
        container.append('<p>' + item + '</p>');
    }
});

动态生成p元素是最干净的,因为您不知道PHP文件将返回多少结果。

我不确定javascript代码,你可能会收到一个json字符串,你必须转换为Javascript数组

在将javascript链接到php脚本之前,请尝试使用postman(或其他http客户端)进行一些调用以确保您的&#39; webservice&#39;正在作为例外工作

答案 3 :(得分:0)

将您的数组发送为json:

echo json_encode(array($value1, $value2, $value3));

JS

$.post(ajaxurl, NULL, function (response) {
     // selectors in same index order as response array
     $('#v1, #v2, #v3').val(function(i){
       return response[i];
     });         
},'json');