$.get错误取决于php文件的结果


$.get error depending on result of php file

我正在构建一个网页,用户可以在其中"签署"一些协议,并查看已签署的和新的(未签署的)协议。为此,网页使用下面代码中的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':
//...