【问题标题】:How to pass a JavaScript array as parameter to URL and catch it in PHP?如何将 JavaScript 数组作为参数传递给 URL 并在 PHP 中捕获?
【发布时间】:2021-03-26 02:05:55
【问题描述】:

我在 JS 中有一个数组,我试图将它作为参数传递给 URL 并在 PHP 中捕获它,但我无法理解如何做到这一点:

var trafficFilterHolder = ["roadworks","snow","blocking"];
var filters = encodeURI(JSON.stringify(trafficFilterHolder));

仅供参考:我正在使用 windows.fetch 进行发布。

在 PHP 中:

$trafficFilters = $_GET["trafficFilters"];
$obj = json_decode($trafficFilters);       
var_dump($obj);

【问题讨论】:

  • 尝试使用echo 输出任何复杂的对象或数组,开始时毫无意义。使用var_dump 获得正确的调试输出。
  • @CBroe 是的,谢谢!
  • 这能回答你的问题吗? php javascript url encoding

标签: javascript php url urlencode


【解决方案1】:

尝试使用 ajax 并在 PHP 端传递该数组并检索值。

var filters = encodeURI(JSON.stringify(trafficFilterHolder));

$.ajax({ 类型:“发布”, 网址:“test.php”, 数据:{数据:过滤器}, 缓存:假,

    success: function(){
        alert("OK");
    }
});

【讨论】:

  • window.fetch() 呢?不应该是一样的吗?它不能与 fetch 一起使用,那为什么它可以与 ajax 一起使用呢?
【解决方案2】:

很简单,你是用ajax把这些数据传给php,对吗?

首先,您错误地创建了 javascript 数组:

var trafficFilterHolder = [0: "roadworks", 1: "snow", 2: "blocking"];

不要使用括号来创建带有键的数组,而是使用这种格式:

var trafficFilterHolder = {0: "roadworks", 1: "snow", 2: "blocking"};

现在,在 ajax 中,只需在 data 中添加数组:

 $.ajax({
     data: { trafficFilters: trafficFilterHolder }
 });

【讨论】:

  • 我使用的是 Fetch 而不是 Ajax
  • 我有一个数组而不是一个对象
  • 在您的代码 sn-p 中,您实际上创建了一个对象数组,因为您声明了值的键,这就是我试图帮助您使用相同方式的原因。但是,即使您有一个通用的 javascript 数组,我的回答仍然有效。此外,您没有在问题中指定将数据传递给 php 的方法,这就是我给出 Ajax 示例的原因。下次,请尝试更具体地提出您的问题。
  • 谢谢,我刚刚编辑了我的问题。我还更改了数组格式。请看一下
【解决方案3】:

对服务器的所有请求都作为 http 请求执行。 HTTP 请求有两种类型 - GET 和 POST。

https://www.w3schools.com/tags/ref_httpmethods.asp

您所描述的称为 GET 请求。对于 GET 请求,参数通过地址栏传递。要发出 http 请求,您有两种选择。

  1. 直接 HTTP GET 请求。 为此,您只需使用

    打开一个新页面

    window.location.href = 'http://your_site.com/file.php?name1=value1&name2=value2'

这将在您的浏览器中打开一个新页面并使用您的参数传递一个请求。

  1. Ajax HTTP GET 请求。 您有很多选择:​​i>
  • xmlHttpRequest 对象的老式方法
  • 带有承诺的现代 fetch API
  • jQuery.ajax 等第三方库

AJAX 请求可以在不更新页面的情况下从服务器发送和接收信息(在 GET 或 POST 请求中)。之后,您可以根据需要使用您的 javascript 应用程序管理收到的结果。

希望,它让你更清楚。您可以在 google 中搜索所有这些技术。这就是如何从前端到后端交换数据的方式。

【讨论】:

  • 我使用的是 Fetch 而不是 Ajax,我需要将其作为 ?trafficFilters= 的参数传递
【解决方案4】:

您正在使用 fetch() 而不是 ajax 将数据传递给 php,所以我第一个对 fetch() 执行相同操作的替代方法是:

var trafficFilterHolder = ["roadworks","snow","blocking"];
var trafficFilterHolderJoin = trafficFilterHolder.join(); // comma-separeted format => "roadworks,snow,blocking"

现在将 trafficFilterHolderJoin 变量添加到 fetch() 的 URL 的 traffic 查询中,例如:

fetch('script.php?traffic=' + trafficFilterHolderJoin)

然后在您的 php 脚本文件中,您将使用 explode 函数将逗号分隔格式转换为 php 数组格式:

$traffic = explode(",", $_GET['traffic']);

【讨论】:

  • 差不多了,但是当我在 php 中打印它时,它给了我这个看起来很奇怪的数组:array(3) { [0]=> string(10) ""roadworks" [1]=> string(4) "snow" [2]=> string(9) "blocking"" }
  • 有什么奇怪的?我看到道路工程和阻塞在里面有一个报价,是吗?如果您对var_dump()不熟悉,请尝试使用var_export()print_r()查看数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2012-11-09
  • 2012-10-17
  • 2020-04-29
  • 1970-01-01
  • 2011-09-24
相关资源
最近更新 更多