【问题标题】:Not getting the success callback for an ajax query to my php page没有获得对我的 php 页面的 ajax 查询的成功回调
【发布时间】:2014-01-25 12:43:08
【问题描述】:

编辑:将 $.alert() 更改为 alert()

我有一个文件 planner.php,它使用 JQuery 向同一页面发送 ajax 请求。 使用调试器,我可以看到 php 正确获取请求,访问我的数据库,然后发送数据。但是,即使在发送它之后,我在 javascript 中也没有成功回调。怎么了?

jQuery:

$(function()
{
    $.post('planner.php', {"want": "keys"}, success_func, 'json');
});

function success_func(result)
{
    //This is never called :(
    alert("Worked");
}

PHP:

<?php
require_once "./php/couch.php";
require_once "./php/couchClient.php";
require_once "./php/couchDocument.php";

if (count($_POST) > 0 && array_key_exists("want", $_POST)) {
    $couch_dsn = "http://localhost:5984/";
    $couch_db = "subjects";
    $client = new couchClient($couch_dsn, $couch_db);
    header('Content-type: application/json');
    $response = $client->getView('subject_views', 'keys');
    echo json_encode($response);  //This all seems to work fine
}
?>

就这么简单。那里的所有 PHP 代码都只是访问 couchDB,您不必担心,因为我知道 $response 设置正确。

【问题讨论】:

  • 控制台中有什么东西吗?结果是否良构,加个错误函数看看

标签: javascript php jquery ajax


【解决方案1】:

用于了解 ajax 调用在哪里完成或遇到错误

 $(function()
 {
 $.post('planner.php', {"want": "keys"},function(){
  alert( "success" );
 })
 .done(function(){
    alert("second success");
  })
 .error(function(){
    alert("error");
  });
});

链接:http://api.jquery.com/jquery.post/

【讨论】:

    【解决方案2】:

    这可能是因为没有像$.alert() 这样的东西,而是使用简单的alert()

    你的 success_func 也被声明在 ajax 调用下面,在 $.post(); 之前向上移动它

    编辑:

    由于函数已声明,执行前无需键入。

    【讨论】:

    • 函数声明被提升。无需移动它。
    • 好的,我将其更改为 alert(),但我知道这不是问题,因为它不会导致任何错误。并且 success_func 仍然没有被调用。
    【解决方案3】:

    你可以这样使用它可能是你的成功函数没有调用

    var data = 'want=keys';
    $.post(
      'planner.php',
      data
    ).success(function(resp){
       json = $.parseJSON(resp);
       alert(json);
    });
    

    【讨论】:

      【解决方案4】:

      感谢 vivek 为我提供了解决问题的方法。

      基本上我根本不明白 php 是如何工作的。发送 POST 响应的代码位于页面的中间,因此 PHP 将整个页面连同我编码的任何额外 json 一起发回,然后 JQuery 尝试将此 html 页面解析为 json,但失败了,然后没有运行成功函数,因为它的请求从未成功。阅读this answer 了解更多信息

      明显的解决方案是:

      1. 为响应创建一个新页面
      2. 把php放在顶部 页面。

      为简单起见,我最终选择了选项 #2。

      谢谢大家!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        • 2012-06-08
        • 1970-01-01
        • 2019-04-22
        相关资源
        最近更新 更多