views:

71

answers:

2

Alright so I have a php script which gets results from a DB, and to get those results I'm using a jQuery script to pull the results via getJSON. It works perfectly but now I want to do something if the php script returns no results (empty).

I tried:

$.getJSON('path/to/script'), {parameter:parameter}, function(data){
 if (data) {
  alert('Result');
 } else {
  alert('Empty);
 }
});

But it's no good. I've tried different things like if (data.length) but still nothing. I've noticed that if there is no returned data the callback will never fire at all. So if that's the case, how do I handle a empty return?

A: 

According to the documentation, if you get nothing on the response, .getJSON will give you null. However, if you're passing something such as {}, you will end up with an object that has no such properties as .length and that will be regarded as true in an if condition.

If you need to identify an empty object, there may be a shorter way, but the one that occurs me at the moment is:

var isEmpty = true;
for (var p in data) { isEmpty = false; break; }
// at this point, if isEmpty should tell you if 'data' is an empty object

This poor code works assuming that data is of type object.

Miguel Ventura
Should be `for (var p in data) {if ( data.hasOwnProperty(p) ) { isEmpty = false; break; }}`
Justin Johnson
+1  A: 

You should check your PHP output to always output some data.

In my codes I add a success flag to my outputs, like this:

$result = array (
 'success' => true,
 'data' => $data
);
echo json_encode($result);

If I don't output anything, I put false into success, which makes it easy to validate in jQuery via data.success:

Example:

$.getJSON('path/to/script'), {parameter:parameter}, function(data){
 if (data.success) {
  alert('Result');
 } else {
  alert('Empty');
 }
});

If you don't want to modify your output, you can setup an ajaxError to catch your reading problems.

Example:

$.ajaxError(function() {
 alert('error triggered');
});

P.S.: I dont know if the missing ' at the end of this line:

alert('Empty);

is really missing in your original, if so, your missing a ' ;-) >>

alert('Empty');
favo