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;"> </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的主要内容,如果未能解决你的问题,请参考以下文章