3

We have 2 text fields. We have tried to post user_Name and Password through an ajax call.

We have used PHP services and the username and password do save to the DB successfully.

But we do not get any response from our success or fail.

The code:

PHP:

 if(isset($_GET['ecovauserName']) && isset($_GET['ecovauserage']) ){
    $ecovauserName             = $_GET['ecovauserName'];
    $ecovauserage              = $_GET['ecovauserage'];



     $sql  = "SELECT ecovauserName,ecovauserage FROM ecovauserinfo WHERE ecovauserName = '" . $ecovauserName . "' and ecovauserage = '" . $ecovauserage . "'";
    $query      = mysql_query($sql);

    if (mysql_num_rows($query) > 0)
    {
        echo "fail to post";
    }
    else
        {  echo("Entered into DB inserting the values");

        $insert = "INSERT INTO ecovauserinfo (ecovauserName,ecovauserage)
                        VALUES ('" . $ecovauserName . "','" . $ecovauserage . "')";

        $query  = mysql_query($insert);
        echo $insert;
        if ($query)
        {
            echo "EventFile Successfully stored";
        }
            else
            {


                echo "Insert failed";
            }
        }
     }

Ajax Call:-

 $.ajax({
               url:'http://192.168.3.134:8080/ekova/postevent.php',
               type:'POST',
               data:{ecovauserName :username,ecovauserage:password},
               contentType: "application/json; charset=utf-8",
                dataType: "jsonp",
               success:function(responsive){
                alert(responsive);
               },
               error:function(w,t,f){
                 console.log(w+' '+t+' '+f);
               }
            });

The above code is working fine. The username and password are successfully stored in the DB. But we need to get a success of fail response.

My success:function is not called and so my alert box never runs to notify me of the success.

Please guide me with what is wrong in the code.

samayo
  • 16,163
  • 12
  • 91
  • 106
Pavan Alapati
  • 267
  • 3
  • 5
  • 15
  • 1
    **Danger**: You are using [an **obsolete** database API](http://stackoverflow.com/q/12859942/19068) and should use a [modern replacement](http://php.net/manual/en/mysqlinfo.api.choosing.php). You are also **vulnerable to [SQL injection attacks](http://bobby-tables.com/)** that a modern API would make it easier to [defend](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) yourself from. – Quentin Mar 06 '15 at 10:40

5 Answers5

1

The data type should read "json" not "jsonp"

I would suggest that you use "text" instead of "json" since you are returning normal text results and not json encoded data.

Philip Kirkbride
  • 21,381
  • 38
  • 125
  • 225
Schalk Keun
  • 538
  • 4
  • 13
  • thanks for reply.We tried as you said but when we placed JSON ,data Not saved in DB – Pavan Alapati Mar 06 '15 at 10:27
  • the dataType is used to tell ajax what data is expected to RETURN and not SEND. So this change should not have affected anything in your posting/saving. Also NOTE> you are telling AJAX to POST but you are checking the $_GET globals. You will need to use $_POST['ecovauserName'] and $_POST['ecovauserage'] – Schalk Keun Mar 06 '15 at 10:35
1

You could try removing the line dataType: "jsonp" - that's had some success.

See this post: Ajax success event not working

EDIT - try putting basic console.log statements in both success and fail just to see if either are being hit.

$.ajax({
           url:'http://192.168.3.134:8080/ekova/postevent.php',
           type:'POST',
           data:{ecovauserName :username,ecovauserage:password},
           contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
           success:function(){
            console.log('in success');
           },
           error:function(){
             console.log('in error');
           }
        });

Check whether you're getting an error:

error: function(xhr, status, error) {
  var error1 = eval("(" + xhr.responseText + ")");
  console.log(error1.Message);
  console.log(geturl.getAllResponseHeaders());
  alert("error!"+ geturl.getAllResponseHeaders());
}
Community
  • 1
  • 1
hlh3406
  • 1,382
  • 5
  • 29
  • 46
1

Why don't you use status codes returned by the call, as an example:

$.ajax({
  url:'http://192.168.3.134:8080/ekova/postevent.php',
  type:'POST',
  data:{ecovauserName :username,ecovauserage:password},
  contentType: "application/json; charset=utf-8",
  dataType: "jsonp",
  statusCode: {
    404: function () {
      //error
    },
    200: function (data) {
      //response data
    }
  }
});
Capt Planet
  • 113
  • 6
0

Return a json_encode response in your php call, like this:

echo json_encode(array('status' => 'in success'));
Juan de Parras
  • 768
  • 4
  • 18
0

You seems doing a query with cross-domain and jsonp make that possible.

So, in your php code you have to return a jsonp format :

$response = array('success' => false, 'message' => '');

if (isset($_GET['ecovauserName']) && isset($_GET['ecovauserage'])) {
    $ecovauserName = $_GET['ecovauserName'];
    $ecovauserage = $_GET['ecovauserage'];

    $sql = "SELECT ecovauserName,ecovauserage FROM ecovauserinfo WHERE ecovauserName = '" . $ecovauserName . "' and ecovauserage = '" . $ecovauserage . "'";
    $query = mysql_query($sql);

    if (mysql_num_rows($query) > 0) {
        $response['message'] = 'fail to post';
    } else {
        $insert = "INSERT INTO ecovauserinfo (ecovauserName,ecovauserage) VALUES ('" . $ecovauserName . "','" . $ecovauserage . "')";

        $query = mysql_query($insert);
        if ($query) {
            $response['message'] = 'EventFile Successfully stored';
            $response['success'] = true;
        } else {
            $response['message'] = 'Insert failed';
        }
    }
}
// The header is for telling that you are sending a json response
header('content-type: application/json; charset=utf-8');

// formatting a response as jsonp format.
echo $_GET['callback'] . '(' . json_encode($response) . ')';

In your javascript :

$.ajax({
    url: 'http://192.168.3.134:8080/ekova/postevent.php',
    type: 'POST',
    data: {ecovauserName: username, ecovauserage: password},
    contentType: "application/json; charset=utf-8",
    dataType: "jsonp",
    success: function (response) {
        alert(response.message);
    },
    error: function() {
        console.log('error');
    }
});

More information at http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp

Bang
  • 919
  • 4
  • 11
  • thanks for reply we are new to PHP please explain where we placed two lines header('content-type: application/json; charset=utf-8'); echo $_GET['callback'] . '(' . json_encode($response) . ')'; – Pavan Alapati Mar 06 '15 at 11:10
  • we got error: function() { console.log('error'); } error – Pavan Alapati Mar 06 '15 at 13:03
  • add for debug `error: function (jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.log(errorThrown); }` – Bang Mar 06 '15 at 13:10
  • we got errors this Object parsererror Error: jQuery111002985340391751379_1425647499106 was not called file:///D:/SaveApp/SaveApp/assets/ForLL/jquery.mobile-1.4.2.min.map Failed to load resource: net::ERR_FILE_NOT_FOUND – Pavan Alapati Mar 06 '15 at 13:15