当前位置: 首页 > 知识库问答 >
问题:

如何读取异步调用中传递给php的数组

万嘉石
2023-03-14

我在js脚本中有以下内容:

let skippers = {};
for(let i = 0; i < skipperIds.length;i++){
    skippers[skipperIds[i].value] = skipperIds[i].checked;
}

regData.skippers = skippers;          
responseData = sendData2('https://sailwbob.com/lagin/public/register.php',regData);

其中sendData2是使用axios的异步调用。船长看起来像

{1:true,20:false}

在我的php文件中,我有:

$skippers = ($_POST['skippers']);           
            
$skipperIds = array_keys($skippers);
$skipperValues = array_values($skippers);

但这是行不通的。我认为php会将$\u POST中的数组转换为字符串,但我不确定。

两个问题:

  1. 如何将$skipper转换回数组
  2. 我一直在尝试使用print\r查看服务器上的数据,但由于这是一个异步调用,它无法工作,因为print\r结果被发送回js脚本,而不是在屏幕上打印出来。有没有办法查看打印结果

更新:

我尝试了$x=json\u解码($\u POST);但收到一个错误,表示它应为字符串。

以下是对axios的呼叫:

function sendData2(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        //console.log(key,value)
        bodyFormData.append(key,value)
    }

    return axios({
            method: 'POST',
            url: url,
            data: bodyFormData,
            headers: {'Content-Type': 'multipart/form-data'}
            })
                .then(function(response){
                    return response.data
                })
                .catch(function(response){
                    return response
                })
}

更新2:

$skippers显示$skippers=[object]。有没有办法将其正确发送到服务器?

共有2个答案

谭翰海
2023-03-14

虽然axios会自动对数据进行字符串化,但对于嵌套数组显然不会这样做。我需要补充:

 regData.skippers = JSON.stringify(skippers); in my js 

然后在php文件中

$skippers = get_object_vars(json_decode($_POST['skippers']));
樊运乾
2023-03-14

正如本文所讨论的,axios将Javascript对象序列化到JSON,并且由于PHP不支持JSON作为填充$_POST的数据格式,您可以像这样在PHP中检索它们:

$_POST = json_decode(file_get_contents("php://input"),true);
$skippers = $_POST['skippers'];
 类似资料:
  • 问题内容: 我确定我的问题是基于对node.js中的异步编程缺乏了解,但这是可行的。 例如:我有一个要爬网的链接列表。当每个请求都返回时,我想知道它的URL。但是,大概是由于竞争条件造成的,每个请求都将URL返回设置为列表中的最后一个值。 预期产量: 实际输出: 所以我的问题是: 如何将url(按值)传递给回调函数?要么 链接HTTP请求以使其顺序运行的正确方法是什么?要么 我还缺少什么? PS:

  • 问题内容: 我目前有一个AngularJS ,它基本上是通过调用异步获取的,然后将获取的数据链接到某个范围变量。 代码的恢复版本: 然后,我有一个自定义,它通过一个元素接收那些相同的作用域变量。 代码的恢复版本: 的恢复版本: 问题是,由于是异步的,因此该指令已被严重初始化(例如:未定义)。 尽管找到了一些似乎可以解决此问题的解决方案,但我找不到能为我解决该问题的任何方法。即,我试图观察变量,仅在

  • 问题内容: 当有字符可用时,是否有一种优雅的方法来触发事件?我想避免投票。 问题答案: 您将必须创建一个单独的线程以阻止读取,直到有可用的线程为止。 如果您不想实际消耗输入,则必须用内部缓冲区包装它,读入缓冲区,然后喊叫,并在要求输入时从缓冲区返回数据。 您可以这样解决:

  • 我创建了一个输入值的表单,然后jQuery将读取这些值。此时,jQuery将对PHP文件进行ajax调用,该文件必须将文章上传到MySQL(它已经这样做了)。问题是,我找不到一种方法来传递图像的tmp到PHP使其读取。 第一个代码:表单 读取对象jQuery: 我无法将照片发送到PHP文件并通过将其恢复。

  • 问题内容: 我有一个异步函数,要连续多次调用。问题是“多个”可以是几十万或数百万… 显而易见的方法是从回调中调用相同的函数,如下所示: 当然,涉及一些逻辑来停止递归。问题是堆栈是否充满了调用,并可能在某些时候导致堆栈溢出? 问题答案: 问题是堆栈是否充满了调用,并可能在某些时候导致堆栈溢出? 否。 如果调用回调是异步传递的,则不会堆积堆栈。 在您的代码中: 这是逐步发生的事情: 首先被称为。 然后

  • 问题内容: 使用异步模块时,如何将参数从上一个回调传递到下一个回调? 这是来自github上的文档的示例 问题答案: 您可以将异步函数与异步模块的函数链接在一起。这使您可以说:“先执行x,然后将结果传递给函数y,然后将结果传递给z”。从[docs] [1]复制: 您严格不需要异步模块来完成此任务;此功能旨在使代码更易于阅读。如果您不想使用异步模块,则始终可以只使用传统的回调。