Javascript POST 不起作用 - 将 Javascript 数组发送到 PHP

Posted

技术标签:

【中文标题】Javascript POST 不起作用 - 将 Javascript 数组发送到 PHP【英文标题】:Javascript POST not working - Sending Javascript array to PHP 【发布时间】:2013-04-17 08:55:00 【问题描述】:

我知道在 SO 和网络上有相当多的条目,但是我无法开始工作 - 任何帮助将不胜感激。

所以我有一个 javascript 数组,我试图将其传递给 php

我有一个小的 JS 函数可以先发布它,所以:

function sendToPHP() 
$.post("index.php",  "variable": toSearchArray );

然后向下页,我有PHP:

<?php 
    $myval = $_POST['variable'];
    print_r ($myval);
    ?>

*打印件就在那里供我检查。

任何想法 - 仅供参考,我使用的是 MAMP,所以它的 localhost:8888/index.php。这是否会导致 URL 不正确的问题?

谢谢。

【问题讨论】:

print_r 输出什么? 你没有对 AJAX 帖子的结果做任何事情,所以我不知道你为什么希望看到任何东西 其实我刚刚意识到,你是通过 ajax 将数据发送到你所在的同一页面吗? ajax 不是那样工作的。您通常会将 ajax 数据发送到另一个页面并向 $.post 添加第三个参数,这是一个回调函数,在 ajax 调用完成时调用该函数,并在 ajax 调用的输出中传递。在回调内部是您将更新屏幕的地方。 输出什么也没有。那么对于 AJAX 帖子需要做什么 - 我假设它刚刚移交? 试试 $.post(url:"index.php", data: "variable": toSearchArray ); 【参考方案1】:

您对 ajax 的工作原理存在误解。尽管 jquery 使它变得容易,但它仍然不是自动的。你应该只用 jquery 找到一个关于 ajax 的教程,但是如果你只想将一个数组发送到 php 并在屏幕上查看输出,这样的事情会起作用:

index.php

<html>
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
    //attach to the button a click event
    $('#btn').click(function()
            //get the value from the textbox
        var txt=$('#txt').val();
            //if txt is blank, alert an error
        if(txt == '')
            alert("Enter some text");
         else 
                    //send txt to the server
                    //notice the function at the end. this gets called after the data has been sent
            $.post('catcher.php', 'text':txt, function(data)
                            //now data is an object, so put the message in the div
                $('#response').text(data.message);
            , 'json');
        
    );
);
</script>
</head>
<body>
<input type="text" id="txt">
<input type="button" id="btn">
<pre id="response" style="overflow:auto;width:800px;height:600px;margin:0 auto;border:1px solid black;">&nbsp;</pre>
</body>
</html>

catcher.php:

<?php
//if something was posted
if(!empty($_POST))
    //start an output var
    $output = array();

    //do any processing here.
    $output['message'] = "Success!";

    //send the output back to the client
    echo json_encode($output);

最好使用2个文件,一个供用户加载启动ajax调用,一个页面处理ajax调用。发送数组也一样,只是将获取文本框值替换为发送数组即可。

【讨论】:

嗨 - 好的,我看到这个工作但是因为我有 2 个文件 - 我如何将它恢复到原始的数组值,即 index.php - 我应该只使用会话吗? 它已经是 index.php 中的一个数组。但是,如果您希望服务器(文件 2,catcher.php)的响应是一个数组,您可以在您的帖子中指定一个数据类型,最有可能是“json”,作为第四个参数。然后从第二个文件发送的任何内容都可以通过 php 中的 json_encode 运行,回调函数将得到它。我将更新示例以显示这一点。【参考方案2】:

而不是将变量 toSearchArray 声明为数组。将其视为一个 javascript 对象。 var toSearchArray = 。

【讨论】:

【参考方案3】:

当您打开页面时会发生这种情况 (index.php)

    index.php 发出GET 请求并返回内容。 $_POST 数组中有 no 值,因此您的 print_r() 行不执行任何操作。 执行 Javascript,通过 AJAX 向 index.php 发送 POST 请求。请注意,这是一个全新的请求,与原始 GET 不同。 $_POST 数组将在 this 请求中填充,但响应被丢弃。

希望这将说明您可以做什么。

ajax.php

<?php
header("content-type: application/json");
exit(json_encode($_POST));

index.php

<script>
const toSearchArray = ['some', 'array', 'with', 'values'];
$.post('ajax.php', 
  variable: toSearchArray
).done(data => 
  console.log(data) // here you will see the result of the ajax.php script
)
</script>

【讨论】:

【参考方案4】:

好吧,当涉及到数组时,我认为这不是正确的做法,请参阅您需要在 javascript 中使用 JSON 编码,然后在 php 中使用 JSON 解码 参考这个问题Pass Javascript Array -> PHP

【讨论】:

在 jquery 中,您可以传递一个对象,jquery 会将其序列化为有效的 post 有效负载。 api.jquery.com/jQuery.post 我迷路了。从字面上不知道为什么我所拥有的不起作用我需要阅读什么?我想要做的就是向 PHP 发送一个 javascript 数组

以上是关于Javascript POST 不起作用 - 将 Javascript 数组发送到 PHP的主要内容,如果未能解决你的问题,请参考以下文章

javascript注入$http post方法不起作用

JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求

Javascript 验证在 ASP 中不起作用。网

Django - Javascript 在模板中不起作用

简单的 Javascript http 请求片段但不起作用

将文本框内容回显到 POST 请求中不起作用