【问题标题】:Send an array to PHP script using AJAX call使用 AJAX 调用将数组发送到 PHP 脚本
【发布时间】:2013-03-25 11:21:25
【问题描述】:

我对 ajax 很陌生,我无法解决这个问题,也找不到其他讨论它的话题。 我要做的是使用 ajax 将数组发送到 php 脚本。
该数组是一个关联数组[index][value]。问题是,一旦我将数组发送到 php,它看起来就像一个单维数组。 换句话说,一个例子:
如果数组是:["apple", "pear", "orange"]
应该是:array[0] 打印“apple”

但在 php 中,该数组仅包含一个元素,即所有字符串的串联。因此,如果我打印 array[1],我将获得 "p"、array[4] "e" 等。
我该如何解决?

提前感谢您的帮助。

var items = new Array();

代码 AJAX 脚本:

    $.ajax({

      type: "POST",
      url: "calculate.php",

      data: "items=" + items, 
      dataType: "html",

      success: function(msg)
      {
        var response = jQuery.parseJSON(msg);
        $('#second_results').html(response.output); 
      },
      error: function()
      {
        alert("Failed"); 
      }
    });

PHP:

$items = $_REQUEST["items"];

【问题讨论】:

  • 不知道是不是数据类型,应该是JSON?浏览器实际上向 PHP 发送了什么?例如使用 Chromes DeveloperTools/network 选项卡进行查找。
  • 无论您向 PHP 发送什么,PHP 都会将其解释为字符串($a = "apple"; echo $a[0]; 将打印“a”。有关详细信息,请参阅手册的 String access and modification by character 部分)
  • $items = $_POST["items"];会帮助你

标签: php javascript ajax arrays


【解决方案1】:

您有多种选择。 其中我介绍了其中的 2 个。

1)

逗号分隔参数并在逗号处分割。

// ...
data: "items=" + item1 + "," + item2 + "," item3,
// ...

$items = explode(',', $_REQUEST['items']);

2)

使用另一种表示法:

// ...
data: "items[0]=" + item1 + "&items[1]=" + item2 + "&items[2]=" + item3,
// ...

$items = $_REQUEST['items'];

虽然我也没有测试过,但它应该可以正常工作。 :)

您可能还想看看:Parse query string into an array 让 php 处理正确的转换。

【讨论】:

  • 谢谢你的回答 :) 问题是我动态地将元素添加到数组中。因此,可以在数组上迭代解决方案,创建一个包含您建议的所有元素的变量,然后使用“数据:myVariable”。它可以工作吗?我现在试试!
【解决方案2】:

【讨论】:

    【解决方案3】:

    在 ajax 调用的数据中传递这个:

            var a = {};
            a["key1"] = "val1";
            a["key2"] = "val2";
            a["key3"] = "val3";
    $.ajax({
    
      type: "POST",
      url: "calculate.php",
    
      data: a ,
      dataType: "html",
    
      success: function(msg)
      {
        var response = jQuery.parseJSON(msg);
        $('#second_results').html(response.output); 
      },
      error: function()
      {
        alert("Failed"); 
      }
    });
    

    在 PHP 方面:

     if($_SERVER["REQUEST_METHOD"]=="POST")
    {
       foreach($_POST as $key=> $val){
       echo $key."and".$val;
       }
        die();
    }
    

    【讨论】:

      【解决方案4】:
      $.ajax({
      
        type: "POST",
        url: "calculate.php",
      
        data: {items:items}, 
        dataType: "html",
      
        success: function(msg)
        {
          //your code if call succeeds
        },
        error: function()
        {
          //alert("Failed"); 
        }
      });
      

      请注意,您用来传递数组的方式不正确,去掉 + 和 = 符号并改用 :,希望对您有所帮助!

      【讨论】:

      • data: items:items 是无效语法,data: {items:items} 将是
      • 谢谢@Marvin,我完全错过了!
      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2015-07-08
      • 1970-01-01
      • 2017-04-23
      相关资源
      最近更新 更多