【问题标题】:$.post never receives a response$.post 从未收到回复
【发布时间】:2018-08-05 01:01:20
【问题描述】:

我是一个相当缺乏经验的编码员,我正在寻求帮助,了解为什么我没有收到对我的 $.post 命令的响应。

从输出中,(我认为)帖子正确地提交了 PHP 页面,并且 PHP 正确地创建了一个具有我期望值的 JSON 文件。问题是我的回调似乎永远不会触发。

我从未收到“函数响应”的日志消息,因此,我认为帖子从未进入回调。

我已经阅读了很多,并尝试了很多解决方案,包括一些 AJAX。但大约 10 小时后,我被难住了。我的 $.post 基于本指南:Save JavaScript variables to PHP/MySQL DataBase Securely with Ajax Post

感谢您对此提供的任何帮助。

我正在 Windows 最新的 WAMP 服务器上测试代码。

index.php(相关位)

$('#radarDropdown').change(function () {
    currentRadarId = $('#radarDropdown').val();
    var radSel = document.getElementById('radarDropdown');
    var currentRadarName = radSel.options[radSel.selectedIndex].text;
    document.getElementById('radarSelectedLabel').innerHTML = currentRadarId;
    document.getElementById('radarSelectedName').innerHTML = currentRadarName;
    getBacks(currentRadarName, processResponse);
//  getBackground(currentRadarName);
    console.log('Start request');
                
//  document.getElementById('returnBackground2').innerHTML = back1;
//     get background image filename for this radar.
});

function getBacks(currentRadarId, callbackFn) {
    console.log('Enter getBacks');
    $.post(
            "getBackgrounds.php",
            {radarBOMId: currentRadarId},
            function(response) {
              console.log('function response');
              processResponse(response);
            },'json');
};
          
function processResponse(response){
    console.log('Entered processResponse');
    console.log(response);
    var backgroundFile = response.background;
    var locationsFile = response.locations;
    var roadsFile = response.roads;
    var riversFile = response.riverBasins;
    var railFile = response.rail;
    var rangeFile = response.range;
    var topoFile = response.topography;
    var catchFile = response.catchments;
    var wthrDistrictsFile = response.wthrDistricts;
    var waterwaysFile = response.waterways;
    document.getElementById('returnBackground2').innerHTML = backgroundFile;    
    };
});

getBackrounds.php:

<?php
header('Content-type: application/json');

require_once('dbconnect.php');

$typesArray = array(
        'background',
        'catchments',
        'locations',
        'rail',
        'range',
        'riverBasins',
        'roads',
        'topography',
        'waterways',
        'wthrDistricts',
    );

$idval = mysqli_real_escape_string($connection, $_POST['radarBOMId']);

foreach ($typesArray as $i => $value) {
    $sql = 'SELECT backfilename, backtype FROM InUseRadarsBackgroundsView WHERE productidbom ="'. $idval. '" and backtype = "'.$value.'"';
    $result = $connection->query($sql);
    
    $response = array();
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $response[$value] = $row["backfilename"];
            //console.log('Processed row ' & $i);
    }
    echo json_encode($response);
    } else {
        echo "  0 results";
    }
}
?>

POST 响应:

{"background":"IDR503.background.png"}{"catchments":"IDR503.catchments.png"}{"locations":"IDR503.locations.png"}{"rail":"IDR503.rail.png"}{"range":"IDR503.range.png"}{"riverBasins":"IDR503.riverBasins.png"}{"roads":"IDR503.roads.png"}{"topography":"IDR503.topography.png"}{"waterways":"IDR503.waterways.png"}{"wthrDistricts":"IDR503.wthrDistricts.png"}

【问题讨论】:

  • 添加其他回调以在发生错误时调用以查看发生了什么。也许有些事情失败了,你的成功回调永远不会被调用。
  • 一些合理的代码缩进是个好主意。它可以帮助我们阅读代码,更重要的是,它将帮助 您调试代码 Take a quick look at a coding standard 为您自己谋取利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
  • ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 添加到脚本的顶部。这将强制任何mysqli_ 错误生成一个您可以在浏览器上看到的异常,并且其他错误也将在您的浏览器上可见。
  • 看看你的 PHP 脚本,在使用 } 时有一些相当明显的错误(现在我已经合理地格式化了脚本),这几乎肯定会导致该脚本崩溃。
  • 谢谢。是的,我正在呼应每个循环。谢谢...现在研究如何推送键值对。

标签: javascript php jquery post


【解决方案1】:

这不是完整的答案,但请尝试添加其他回调(例如失败回调)以检查在您进行此 POST 时是否发生某些错误。以下是如何做到这一点的示例:

$.post( "example.php", function(data) {
  alert( "success" );
})
.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
})
.always(function() {
  alert( "finished" );
});

【讨论】:

  • 好建议:我收到回复:请求失败:解析器错误。
  • 解析错误表明您在响应中返回了错误的数据类型。查看您的 POST 响应示例,它是无效的 JSON。你能不能 var_dump $response 让我们看看数组是什么样子的。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多