Tech Force One is my web log related to technologies, I use day to day.


Search Tech Sites:
Loading

Sending data between JavaScript and PHP using CodeIgniter, jQuery and JSON »

I am sure you would have had many situations, where you had to pass large amounts of data from PHP to JavaScript. This is a very common need, especially when you are using Ajax. I have seen code where developers would send a comma separated string and parse it out in JavaScript. While it works, the code looks ugly and you can run into many issues if the data you are passing uses the delimiter (comma). A more cleaner approach, of course, is to send data through XML. But parsing XML on the client side might be an overkill for mundane tasks. A quick, clean and simpler approach is to pass data in JSON format.

If you wonder what JSON is, here is what the JSON website says, “JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.“.

The bottom line is that it is easy for ever one!

Making an Ajax request:
jQuery comes with JSON support and even lets you use it with Ajax calls. Let us say, you have an onblur event which makes an Ajax call to get data for the rest of the fields, you would do the following in your onblur event:

url = “http://www.domain.com/mycontroller/” + isbn;
$.getJSON(url, function(json){
document.book_form.publisher.value = json.publisher;
});

For those of you, who have used jQuery before, the above code looks plausible. For the rest, the above function is making an Ajax call to the URL and the second argument, function(json) is a callback function, that gets kicked off when the browser receives the response.

JSON can pack multi dimensional arrays too; the above example is just returning a row of data back to the client.

Now, coming to CodeIgniter, here is a simple PHP function inside a CodeIgniter controller.

function addRecruiter() {
$count = $this->mrecruiter->checkDuplicate($email);
if($count > 0) {
$data['MTYPE'] = “ERROR”;
$data['MESSAGE'] = “The email address already exsists, please try a different one”;
} else {
$this->mrecruiter->addRecruiter();
$data['MTYPE'] = “SUCCESS”;
$data['MESSAGE'] = “Recruiter added successfully!”;
}
echo json_encode($data);
}
In the example above, we are echoing the encoded json data for an Ajax call from the browser. Let us know if you would like a more detailed example, we will publish it at the earliest.

Progressive Download vs Streaming »

When delivering video on the web, you probably would have wondered whether to use a streaming server or not. There are quite a few articles on the web and they are very useful. I just wanted to summarize my experience on this here.

Progressive Download: This is a better solution when your clips are small, say less than 15 seconds. Users would not experience any delay, when the clips are small. In fact, the good thing (or the bad thing) about progressive downloads is that the media completely gets downloaded onto the user’s machine. This makes it play seamlessly even when there are minor network hiccups. Also, contrary to popular belief, progressive downloads does not mean that users have to wait until the complete file is downloaded. These days, all media players, are smarter. They can start playing the video, when they have buffered more than 3-5 seconds. The major drawback with Progressive Downloads is that files are stored locally on the user’s machine and they can re-distribute it, if they wish to do so.

Streaming Video:
This is a good solution, when the files are large. In order to stream a video well, you first need to understand the bitrate you would like to encode the video. If you encode a video, say at 1.2Mbps, and if your users have 512kbps, the video would not play seamlessly. Not only that, when there are network hiccups, there are chances that certain frames of the video are skipped. This is very annoying, when you want to provide a high quality video to your users. Of course, you always have the option of encoding at different settings, low, medium and high. Another issue is that setting up streaming servers are expensive. There are quite a few open source streaming servers for flash, like Red5, lighthttpd and nginx. But most likely, you would have to manually set these up. On the Windows platform, Windows Enterprise Edition comes with a streaming server, so it is relatively easy, though hosting providers usually charge little extra for Windows Enterprise Edition.

If you want an example of both, check out http://www.tsebs.info for Progressive Download. For Streaming, try http://www.ivirtual.in/why-ivirtual.html. Both use Windows Media Player. So, I suggest that you test them on IE7+ on Windows. It will also work on Firefox on Windows. It is little painful to get the links working on Mac.