对服务器的Ajax请求,错误函数没有调用

时间:2016-09-10 05:52:50

标签: android jquery ajax cordova

我正在向服务器发送ajax请求以获取数据库。但是,如果我输入不正确的数据(通过服务器发送)没有任何事情发生,错误功能不起作用,我所做的只是验证服务器的凭据

这是我的代码

$.ajax
    ({
        url: "URL",
        type: "GET",
        datatype: "jsonp",

        data: {type: 'login', id: C_id},
        ContentType: "application/json",

        success: function(res) 
        {

            var simpleJson = JSON.parse(res);

            myDB.transaction(function (txe1) 
            {
                for (var i = 0; i < simpleJson.User.length; i++) 
                {
                    var Cli_id= simpleJson.User[i].id;
                    myDB.transaction(function (txe) 
                    {
                        txe.executeSql('CREATE TABLE Client_data(Mobile integer , C_id integer, U_id integer , name text , ip integer )');
                    }); 


                    myDB.transaction(function (txe1) 
                    {

                        var data_ins = 'INSERT INTO Client_data (Mobile,C_id,U_id) VALUES (?,?,?)';
                        txe1.executeSql(data_ins, [p,C_id,U_id]
                        ,function(tx, result)
                        {
                            navigator.notification.alert('Inserted' ,  onSignup, 'Info', 'ok'); 

                        },
                        function(error)
                        {
                            navigator.notification.alert('Already Registered'); 
                        });
                    });
                }
            });
        },
    });
});

我的PHP代码

<?php
header('Access-Control-Allow-Origin:*');
$conn = mysql_connect("***", "***", "****");
if (!$conn) 
{
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("ekspeser_pro")) 
{
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

if(isset($_GET['type']))
{
    if($_GET['type'] == "login")
    {
        $id=$_GET['id'];    
        $sql = "SELECT  * from client_master WHERE id='$id'";
        $result = mysql_query($sql);                            
        $num_rows = mysql_num_rows($result);
        if($num_rows!=0)
        {
            while($myrow = mysql_fetch_assoc($result)) 
            {
                $recipes[]=$myrow;
            }

            $output = json_encode(array('User' => $recipes));
            echo $output;

        }
        else
        {
             print "invalid key";
        }
    }
    else
    {
        print "invalid login";
    }   
}

    else
    {
        echo "invalid";
    }

mysql_close();


?>

2 个答案:

答案 0 :(得分:0)

您应该实现错误回调以在请求失败时执行某些操作。这是您实现请求失败回调的方法。

$.ajax({
  url: "/save/author",
  type: "POST",
  dataType: "json",
  data: { name: "John", age: "35" },
  success: function (data, status, jqXHR) {
    alert("request succeed");
  },
  error: function (jqXHR, status, err) {
    alert("request failed");
  }
})

根据此示例,我们只是显示带有文字request failed的提醒。您可以根据您的要求相应地实施它。

答案 1 :(得分:0)

如果我认为你是正确的,你想验证传递给你网址的数据,如果我想让你正确处理,请参考下面的内容:

只有在请求失败时才会调用Ajax错误函数,请参阅http://api.jquery.com/jQuery.ajax/

因此,如果您从PHP服务器/ API返回任何响应,则错误函数将不会被触发为&#34;错误&#34;当调用在发送过程中失败时,将触发ajax方法的设置。错误如&#34;超时&#34;,&#34; 404&#34;等......

但是,您可以从PHP代码返回一个密钥,如下所示,以处理ajax代码中的成功和错误:

$data['error'] = $success ? 0:1;// If success than set error to 0 else 1;

在AJAX成功中,您可以将其处理为:

success: function (data, status, jqXHR) {
    if(data.error)
      //do something
    else
      //do something else
}

如果有任何疑问,请告诉我

<强> ------ EDIT ------------------

<?php
header('Access-Control-Allow-Origin:*');
$conn = mysql_connect("***", "***", "****");
if (!$conn) 
{
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("ekspeser_pro")) 
{
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

if(isset($_GET['type']))
{
    if($_GET['type'] == "login")
    {
        $id=$_GET['id'];    
        $sql = "SELECT  * from client_master WHERE id='$id'";
        $result = mysql_query($sql);                            
        $num_rows = mysql_num_rows($result);
        $is_error=0;
        if($num_rows!=0)
        {
            while($myrow = mysql_fetch_assoc($result)) 
            {
                $recipes[]=$myrow;
            }

            $output = json_encode(array('User' => $recipes,'is_error'=>$is_error));
            echo $output;

        }
        else
        {
             $is_error=1;
             $error_message = "Invalid Key";
             $output = json_encode(array('is_error'=>$is_error,'error_message'=>$error_message));
             echo $output;
        }
    }
    else
    {
        $is_error=1;
        $error_message = "Invalid Login";
        $output = json_encode(array('is_error'=>$is_error,'error_message'=>$error_message));
        echo $output;
    }   
}

    else
    {
        $is_error=1;
        $error_message = "Invalid";
        $output = json_encode(array('is_error'=>$is_error,'error_message'=>$error_message));
        echo $output;
    }

mysql_close();


?>

在AJAX Code中,可以像这样访问:

Check for following in success
if(simpleJson.is_error!=1)
   //do your processing
else
   alert(simpleJson.error_message);

如果有什么不清楚,请告诉我