将 AJAX 变量传递给 PHP
Posted
技术标签:
【中文标题】将 AJAX 变量传递给 PHP【英文标题】:Pass AJAX Variable to PHP 【发布时间】:2014-04-23 07:06:35 【问题描述】:您好,所以我的总体目标是单击一个表获取其 ID,然后使用其 ID 加载另一个表。到目前为止,我能够获取 ID,但是当我尝试加载第二个表时,我得到了错误
"未定义索引:C:\xampp\htdocs\abac\ajaxupdate.php 中的 Projec_ID 第 6 行“
这是我的代码
AJAX 脚本(控制台打印 rowID 以便获取,我认为尝试传递时出现问题的变量?)
<script language="javascript" type="text/javascript">
$(document).ready(function()
var log = $("#log");
$(".getRow").click(function()
console.log("Clicked a row...");
rowID = $(this).find("td.idCell").text();
//Print the row ID in the log cell to make sure we got the right one.
log.text("You 1clicked row "+rowID);
console.log("You cl2icked row "+rowID);
//Send the row ID to ajaxupdate.php
$.post("/abac/ajaxupdate.php", what: "updateRow", Projec_ID: rowID)
.done( function(data)
var results = $.parseJSON(data);
console.log(rowID );
)
.fail( function()
console.log("AJAX POST failed.");
);
);
);
</script>
PHP 文件 (ajaxupdate.php) 我认为这里有问题我猜
<?php
if( (isset($_POST['submit'])) || (isset($_POST['Projec_ID'])) )
$Projec_ID =($_POST['Projec_ID']);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select($db->quoteName(array('CV_ID', 'Classifier', 'Value', 'TP_ID')))
->from($db->quoteName('sessionta'))
//also is the like part right?
->where($db->quoteName('TP_ID') . ' LIKE '. $db->quote($_POST['Projec_ID']));
$db->setQuery($query);
$results = $db->loadObjectList();
//echo $Classifier;
?>
【问题讨论】:
您的表单设置为使用 POST 还是 GET? 你试过了吗,$Projec_ID =$_POST['Projec_ID']; 检查您的 AJAX 请求标头并确保将 Projec_ID 传递给服务器。我使用谷歌开发工具来检查这一点。还有为什么你分配$Projec_ID = $_POST['Projec_ID']
,却从不使用它。
查看您的 JQuery 后,我认为将 rowID = $(this).find("td.idCell").text();
更改为 var rowID = $(this).find("td.idCell").text();
这是因为 rowId
不在 $.post()
JQuery 函数调用的范围内。并且可以解决您的问题。
不,在这种情况下你需要 POST
【参考方案1】:
$_POST['submit']
将是假的,除非你设置它:
[...] "what": "updateRow", "Projec_ID": rowID, "submit" : "true"
这就是为什么您会收到错误消息“未定义索引”-!
此外,您可以随时:
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
die("The data above was sent via POST");
解决这些问题..
【讨论】:
JSON 数据键不需要引号。复制自:api.jquery.com/jQuery.post$.post( "test.php", name: "John", time: "2pm" );
然后放入那个 PHP 块。 $_POST['submit']
未在任何地方设置。
抱歉我不太明白?
上面的 PHP 块将帮助您解决 POST 问题 - 以及读取传递给脚本的数据 - 简单的调试块 - 但是,您的问题是 $_POST['submit']
永远不会被设置——因此,你的代码:if( (isset($_POST['submit'])) [...]
将返回 false——尽管,现在我看到你在那里有 ||
而不是 &&
....【参考方案2】:
您的问题可能是您使用的是 ||运算符而不是 && 运算符。
if( (isset($_POST['submit'])) || (isset($_POST['Projec_ID'])) )
这意味着如果您在某个时候传递 $_POST['submit'] 而不是 $_POST['Projec_ID'] 它仍然会运行此代码。给你
"Undefined index: Projec_ID in C:\xampp\htdocs\abac\ajaxupdate.php on line 6 "
尝试将您的代码更改为:
if( (isset($_POST['submit'])) && (isset($_POST['Projec_ID'])) )
【讨论】:
感谢您的帮助,我已停止在第 6 行获取“未定义索引:C:\xampp\htdocs\abac\ajaxupdate.php 中的 Projec_ID ”但现在没有加载,即使我尝试使用像 ("12") 这样的预加载值?我也正确使用了 Where 语句 ->where($db->quoteName('TP_ID') . ' LIKE '. $db->quote('".$_POST['Projec_ID']."')); 这是因为它完全绕过了代码所以问题仍然存在,这个解决方案只是消除了错误。您需要做的是var_dump( $_POST );
或print_r( $_POST );
这将向您显示 $_POST 变量数组中存在哪些变量。然后从那里您可以更好地调试您的解决方案。【参考方案3】:
我认为 Project_ID 不会作为字符串..
试试这个代码。
<script language="javascript" type="text/javascript">
$(document).ready(function()
var log = $("#log");
$(".getRow").click(function()
console.log("Clicked a row...");
rowID = $(this).find("td.idCell").text();
//Print the row ID in the log cell to make sure we got the right one.
log.text("You 1clicked row "+rowID);
console.log("You cl2icked row "+rowID);
//Send the row ID to ajaxupdate.php
$.post("/abac/ajaxupdate.php", what: "updateRow", "Projec_ID": rowID)
.done( function(data)
var results = $.parseJSON(data);
console.log(rowID );
)
.fail( function()
console.log("AJAX POST failed.");
);
);
);
</script>
我刚刚将 Projec_ID 用 " 括起来。
【讨论】:
以上是关于将 AJAX 变量传递给 PHP的主要内容,如果未能解决你的问题,请参考以下文章