我有一个需要将数据传递给php变量的javascript。我已经搜索过如何实现这个,但我不能让它正常工作。这就是我所做的:
Javascript:
$(document).ready(function() {
$(".filter").click(function() {
var val = $(this).attr('data-rel');
//check value
alert($(this).attr('data-rel'));
$.ajax({
type: "POST",
url: 'signage.php',
data: "subDir=" + val,
success: function(data)
{
alert("success!");
}
});
});
});
然后在我的php标签上:
<?php
if(isset($_GET['subDir']))
{
$subDir = $_GET['subDir'];
echo($subDir);
}
else
{
echo('fail');
}?>
我总是得到失败的文字,所以一定有错。我刚开始使用php和jquery,我不知道出了什么问题。拜托我需要你的帮忙。顺便说一句,他们在signage.php上的同一个文件。提前谢谢!
答案 0 :(得分:1)
您使用POST
方法发送数据,并且正在使用GET
<?php
if(isset($_POST['subDir']))
{
$subDir = $_POST['subDir'];
echo($subDir);
}
else
{
echo('fail');
}?>
答案 1 :(得分:1)
您已在ajax中使用方法POST
,因此您必须在php中更改为POST
。
<?php
if(isset($_POST['subDir']))
{
$subDir = $_POST['subDir'];
echo($subDir);
}
else
{
echo('fail');
}?>
答案 2 :(得分:1)
编辑您的javascript代码,将POST更改为ajax类型的GET
$(document).ready(function() {
$(".filter").click(function() {
var val = $(this).attr('data-rel');
//check value
alert($(this).attr('data-rel'));
$.ajax({
type: "GET",
url: 'signage.php',
data: "subDir=" + val,
success: function(data)
{
alert("success!");
}
});
});
});
答案 3 :(得分:1)
当您以这种方式回答POST电话时,您需要三个事项 - 从_POST
读取数据,将其正确放入,然后以JSON回答。
$.ajax({
type: "POST",
url: 'signage.php',
data: {
subDir: val,
}
success: function(answer)
{
alert("server said: " + answer.data);
}
});
或者:
$.post(
'signage.php',
{
subDir: val
},
function(answer){
alert("server said: " + answer.data);
}
}
然后在回复中:
<?php
if (array_key_exists('subDir', $_POST)) {
$subDir = $_POST['subDir'];
$answer = array(
'data' => "You said, '{$subDir}'",
);
header("Content-Type: application/json;charset=utf-8");
print json_encode($answer);
exit();
}
请注意,在响应中,您必须设置Content-Type,并且必须发送有效的JSON,这通常意味着您必须在发送JSON数据包后立即退出,以确保不发送任何其他内容。此外,响应必须尽快到来,并且之前不得包含任何其他内容(甚至不是之前的某些不可见的BOM字符)
另请注意,使用isset
是有风险的,因为您无法发送一些等同于unset的值(例如布尔值false或空字符串)。如果你想检查_POST实际上是否包含一个subDir键,那么显式使用array_key_exists
(出于同样的原因,在Javascript中你有时会使用hasOwnProperty)。
最后,由于您使用单个文件,您必须考虑在第一次打开文件时,_POST将为空,因此您将显示“失败”!您已经开始使用_POST修复此问题:
所以你会做类似的事情:
<?php // NO HTML BEFORE THIS POINT. NO OUTPUT AT ALL, ACTUALLY,
// OR $.post() WILL FAIL.
if (!empty($_POST)) {
// AJAX call. Do whatever you want, but the script must not
// get out of this if() alive.
exit(); // Ensure it doesn't.
}
// Normal _GET opening of the page (i.e. we display HTML here).
一种可靠的检查方法是使用辅助功能验证请求的XHR状态,例如:
/**
* isXHR. Answers the question, "Was I called through AJAX?".
* @return boolean
*/
function isXHR() {
$key = 'HTTP_X_REQUESTED_WITH';
return array_key_exists($key, $_SERVER)
&& ('xmlhttprequest'
== strtolower($_SERVER[$key])
)
;
}
现在你有:
if (isXHR()) {
// Now you can use both $.post() or $.get()
exit();
}
实际上您可以将AJAX代码卸载到另一个文件中:
if (isXHR()) {
include('signage-ajax.php');
exit();
}
答案 4 :(得分:0)
当您使用$_GET
时,您必须在网址中设置数据值,我的意思是
$.ajax({
type: "POST",
url: 'signage.php?subDir=' + val,
data: "subDir=" + val,
success: function(data)
{
alert("success!");
}
});
或将您的服务器端代码从$_GET
更改为$_POST