我正在构建一个网页,用户可以在其中"签署"一些协议,并查看已签署的和新的(未签署的)协议。为此,网页使用下面代码中的2个函数从数据库中获取相关信息,然后构建网页。不幸的是,当php文件(process.php)返回变量nrofagreements=0时,控制台显示get函数的错误;对于任何其他值nrofagreements>0,都不会发生错误-请参阅下面的控制台日志。我还检查了(使用Netbeans调试器)process.php是否正常工作-请参阅下面的json输出,以获取nrofagrements=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
函数NewAgreements:的C日志json输出
"{"nrofagreements":0,"status_general":"success"}"
我没有为您提供特定的解决方案,但我有一些东西可以帮助您朝着正确的方向前进。。。
系统设计
我们珍视的哲学之一是,一切都需要以最有效的方式做好自己的工作。对于大多数开发人员来说,问题是他们对应用程序的每个部分将要做的事情感到困惑,因此尝试&用一个组件做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
}
});
我测试了您的代码,在process.php中发现了一个不合逻辑的项目(只处理了一个案例):
//...
case 'getsignedagreements':
//...
//...
case 'getsignedagreements':
//...
===>应该更正为类似(处理两种情况):
//...
case 'getnewagreements':
//...
//...
case 'getsignedagreements':
//...