当前位置: 首页 > 面试题库 >

jQuery $ .ajax发布到PHP文件不起作用

严亦
2023-03-14
问题内容

因此,这源于昨天的一个问题,由于错误不寻常,该问题迅速失控。这个问题仍然存在,但是这里的问题被搁置了,我被要求改革一个新问题,该问题现在与当前问题有关。所以我们开始。

这个问题本质上是基本的。如果您昨天在帮忙,我已经从$ .post切换到$
.ajax帖子,以将变量传递到我的PHP文件中。但是,我的PHP文件似乎从未收到此变量,表明索引为“未定义”。

现在,这通常意味着该变量不包含任何值,命名错误或发送错误。经过一整天的混乱(杀死我),我仍然没有理由认为我的PHP文件不应该接收此数据。因为我还很陌生,所以我真的希望有人可以发现一个明显的错误或推荐其他可能的解决方案。

这是代码

jQuery的

$('#projects').click(function (e) {
alert(aid); 
$.ajax({    
    url:'core/functions/projects.php',
    type: 'post',
    data: {'aid' : aid},
    done: function(data) {
    // this is for testing
    }
    }).fail (function() {
        alert('error');
    }).always(function(data) {
        alert(data);                                        
        $('#home_div').hide();          
        $('#pcd').fadeIn(1000);
        $('#project_table').html(data); 
    });         
});

的PHP

<?php

include "$_SERVER[DOCUMENT_ROOT]/TrakFlex/core/init.php";

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];               
    try {
        $query_projectInfo = $db->prepare("
            SELECT  projects.account_id,
                    projects.project_name,                  
                    projects.pm,    
                    //..irrelevant code      
            FROM projects
            WHERE account_id = ?                        
        ");

        $query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
        $query_projectInfo->execute();
        $count = $query_projectInfo->rowCount();

        if ($count > 0) {
            echo "<table class='contentTable'>";
            echo "<th class='content_th'>" . "Job #" . "</th>";
            echo "<th class='content_th'>" . "Project Name" . "</th>";
            //..irrelevant code          
            while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {                
                echo "<tr>";
                echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
                echo "<td class='content_td'>" . $row['project_name'] . "</td>"; 
                //..irrelevant code
                echo "</tr>";
            }
            echo "</table>";            
        }       
    } catch(PDOException $e) {
        die($e->getMessage());
    }   
} else {
    echo 'could not load projects table';
}

?>

通过按“ #projects”运行此代码时,我会收到2条警报。第一个警报显示为“ 6”,这是变量“ aid”的值,是预期值。第二个警报为空白。

现在这是我感到困惑的地方。如果帖子的发送值为6。是否未设置$ POST [‘aid’]?同样,如果这是真的,我的代码是否应该执行if条件语句的一部分
_而
不是我的else?。无论哪种方式,这都让我感到奇怪。我不应该从文件中收到 一些东西PHP吗?

因此,我们相信Firebug是吧?如果我打开Firebug并像这样通过,
Firebug -> POST projects.php -> XHR -> POST(tab) ->
我会在“参数”窗口中看到6,在“源”窗口中看到“ 6”。然后,如果我单击“响应”和“ HTML”选项卡,它们都没有任何价值。

所以无论如何,那堵墙是我的问题。再一次,我真的希望有人能在这里帮助我。我不想再浪费时间在应该是一个简单的解决方案上。

编辑

如果我将我的php文件更改为如下所示

<?php

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];
    echo $aid;
} else {
    echo 'fail';    
}

现在的响应是“ 6”!万岁!我们取得了突破!现在为什么不加载查询产生的表?

旁注 如果我拿走了

if(isset($_POST['aid'])){
//all my code
} else {
    //response
}

然后像这样硬编码变量$ aid

$aid = '6';

然后PHP直接运行文件,查询成功,页面将加载其动态创建的表。

也是为了回答要求我使用的答案之一

$('#projects').click(function (e) {
    alert(aid); 
    $.ajax({    
        url:'core/functions/projects.php',
        type: 'post',
        data: aid,
        success: function(data) {
        // this is for testing
        }
        }).error (function() {
            alert('error');
        }).complete (function(data) {
            alert(data);                                        
            $('#home_div').hide();              
            $('#pcd').fadeIn(1000);
            $('#project_table').html(data); 
        });     
});

我正在使用该方法,但是我正在使用jQuery
v1.10.2,根据此方法,这些方法已经或将被弃用。无论哪种方式,结果的差异为0。

无论如何,现在的问题是。如果使用简单版本,为什么会得到回显$ aid变量“ 6”的原因。但是,当我尝试使用它运行查询时,我 什么
也没得到。另外请尝试记住如果我对表6进行了硬编码。


问题答案:

我认为这可能是错误:

data: aid,

它应该是

data: {'aid':aid},

这将提供$ _POST [‘aid’]标签和您在php页面中寻找的值。

编辑:

如果您对此有疑问,我将其简化以进行测试,以我的经验来看,这种事情不起作用的主要原因是:

它没有到达文件

它正在到达文件,但是文件期望的内容与接收的内容有所不同,并且由于控制结构的原因,它没有返回任何内容

它正在使用正确的数据到达文件,但是php文件中还有其他错误阻止它返回。

您可以轻松排除每种情况。



 类似资料:
  • 问题内容: 好吧,我已经建立了我的json字符串,但是我不确定下一步该怎么做? 在我的php文件中,我试图将dataString写入文本文件,这样我可以看到它通过ok,但是文本文件中什么都没有!我在客户端或PHP方面做错了什么,我的php代码: 问题答案: 您为什么不尝试像这样构造数据 然后在您的AJAX通话中 现在,您的PHP脚本可以将数据作为多维数组处理

  • 我对使用ajax-jquery将php数组发送到另一个php文件有疑问,如果我们使用一些输入类型隐藏值通过jquery post发送php数组,这是将数组转换为字符串。所以另一个php文件没有接收数组值,而是接收字符串。我知道php的爆炸内爆功能。但是在codeiginter中,给定的数组是不同的 我使用输入类型隐藏示例代码发送此数组 我的 jquery-ajax 代码 在这个数组中。我如何使用爆

  • 问题内容: 该代码将鼠标移动坐标存储在数组中,并且应该在卸载之前将其发布。但是它不发布。如果我改变 名称:移动 至 名:“布拉布拉” 有用。表示问题出在“ moves”变量上。我该如何运作? 问题答案: 你可以试试看 这是我几个月前开发的一个小例子。在这种情况下,坐标存储在文本文件中,但是您可以使用INSERT替换它到数据库中。 在客户端上输入: 现在,您需要在服务器端创建一个名为server.p

  • 问题内容: 我有一个简单的php文件,它可以解码我的json字符串,并与ajax一起传递并标记结果,但是我不能保留变量,为什么? 我尝试使用fireBug进行检查,我可以看到POST请求已正确发送,当调用 php 脚本时,他对我做出了Noooooooob的响应,似乎已设置了任何POST变量。 我想要的就是拥有我的数组=) JSON字符串由生成: 的JavaScript save_categorie

  • 问题内容: 我在一个控制器中使用了以下代码; 我调试了它,它涉及返回行,但是没有发生重定向。是否可以在Ajax.BeginForm内执行此操作?这是剃刀代码; 问题答案: 您无法从服务器重定向AJAX操作。如果您希望浏览器以AJAX操作重定向,则需要使用javascript进行重定向。显然,使用AJAX重定向绝对没有用。如果您打算重定向,请使用常规的Html.Begin表单,不要打扰AJAX。

  • 问题内容: 我正在尝试在C#上检索JSON对象,这是我的JavasSciprt帖子,但无法在代码隐藏中处理它,谢谢! 我试图检索数据,如: 问题答案: 这是Encosia.com提供的示例(我添加了一个form参数)。您不需要访问-您可以改用方法参数。 代码隐藏 Java脚本