【发布时间】: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