Я создаю веб-страницу, где пользователь может "подписать" некоторые соглашения и просматривать подписанные и новые (беззнаковые) соглашения. Для этого веб-страница использует 2 функции в приведенном ниже коде, чтобы получить соответствующую информацию из базы данных, а затем создать веб-страницу. К сожалению, когда -and только when- php файл (process.php) возвращает переменную nrofagreements = 0, консоль показывает ошибку для функции get, для любых других значений nrofagreements> 0 ошибки не возникает - см. Консольный журнал ниже. Я также проверил (с отладчиком Netbeans), что process.php работает правильно - см. Вывод json ниже для nrofagreements = 0-, но я все еще подозреваю, что ошибка должна быть в этом файле php (?) Любая идея, что пойдет не так, и как исправить Это?
A1. Код jquery:
$(document).ready(function(){
function NewAgreements(){
var jqxhr = $.get( "process.php", //get all
{ command: "getnewagreements", val1: "", val2: "" },
function(msg) {
},
"json"
).done(function(msg) {
console.log( "NewAgreement. $.get result: second success" );
//some code here to build the form based on msg from $.get()
form = buildNewAgreementsform(msg); //build form with supplier agreements and related products
$("#wrapper").append(form);
})//.done(function()
.fail(function() {
console.log( "NewAgreement. $.get result: error" );
})//.fail(function()
.always(function() {
console.log( "NewAgreement. $.get result: finished" );
});//$.get(
}//function getX()
//used by: tabs-agreements
NewAgreements();
function SignedAgreements(){
var jqxhr = $.get( "process.php", //get all
{ command: "getsignedagreements", val1: "", val2: "" },
function(msg) {
//var ecorp_eprodselectid;
},
"json"
).done(function(msg) {
console.log( "SignedAgreement. $.get result: second success" );
//some code to build the form based on the msg info from $.get()
form = buildSignedAgreementsform(msg); //build form with supplier agreements and related products
$("#wrapper-signedagreements").append(form);
})//.done(function()
.fail(function() {
console.log( "SignedAgreement. $.get result: error" );
})//.fail(function()
.always(function() {
console.log( "SignedAgreement. $.get result: finished" );
});//$.get( ",
}
SignedAgreements();
}); //$(document).ready
A2 упрощенный php-код:
session_start();
$response_array = array();
$cmd = $_GET['command'];
switch($cmd){ //command handler
case 'getsignedagreements':
//some code here
$response_array['nrofagreements'] = $k;
if($response_array['nrofagreements'] == 0){
$response_array['status_general'] = 'success';
break;
}
//some code here
break;
case 'getsignedagreements':
//some code here
break;
default: //invalid command from webpage
$response_array['status_general'] = 'error';
break;//default
}//switch
$str = json_encode($response_array);
echo json_encode($response_array);
B. консоль журнала:
NewAgreement. $.get result: error
NewAgreement. $.get result: finished
SignedAgreement. $.get result: second success
SignedAgreement. $.get result: finished
C log json для функции NewAgreements:
"{"nrofagreements":0,"status_general":"success"}"
Я проверил ваш код, нашел один нелогичный элемент в process.php (обрабатывается один отдельный случай):
//...
case 'getsignedagreements':
//...
//...
case 'getsignedagreements':
//...
==> следует исправить что-то вроде (обрабатывая два случая):
//...
case 'getnewagreements':
//...
//...
case 'getsignedagreements':
//...
У меня нет конкретного исправления для вас, но у меня есть кое-что, что поможет вам в правильном направлении...
Системный дизайн
Одна из философий, которые мы считаем дорогой, - это идея, что все должно выполнять свою работу самым эффективным способом. Проблема для большинства разработчиков заключается в том, что они путаются с тем, что будет делать каждая часть их приложения, и, следовательно, попытаться выполнить 5 заданий с одним компонентом
Причина, по которой я объясняю это, состоит в том, что часть вашего вопроса задается вопросом, следует ли проверять с помощью JS или PHP. Ответ заключается в том, что вы должны знать, какая часть системы будет работать - похоже, вы используете PHP для проверки правильности ввода с сеансом, поэтому я бы предположил, что вы обрабатываете только логику для этого в Файл PHP
Ajax
Лично я бы обработал ответ в вашей $.get
, но я бы переключился на Ajax в качестве своего собственного предпочтения:
$.ajax({
url: "process.php",
data: { command: "getnewagreements", val1: "", val2: "" },
success: function (msg) {
//handle validation in here
},
error: function(msg) {
//only fires when the URL can't be found etc
}
});