将 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?
还是
?看起来它可能是 POST 但只是检查
你试过了吗,$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——尽管,现在我看到你在那里有 || 而不是 &amp;&amp; ....【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AJAX 将 JS 变量传递给 PHP

将 AJAX 变量传递给 PHP

将全局变量传递给ajax函数,发布到php,保存到数据库

如何使用 Javascript 和 Ajax 将 HTML 单选按钮值传递给 PHP 变量?

AJAX 变量传递给 SQL 但不传递给 PHP

ISO8859_1中的Jquery AJAX传递变量