Punctual add message php. PHP AJAX CRUD: creating, deleting, editing records in the MySQL database

In my Zend app I'm writing a bit of an API for mobile apps. To make it easier for mobile developers, I use Swagger. So far everything is working fine, except for one GET request.

When do I call /user/messages/(sessionToken)? NumMessages = (numMessages) & pageNr = (pageNr) in the browser, I get the results I want, but when I try to let Swagger execute this request, only the sessionToken is passed. I tried these annotations for Swagger:

/** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" Gets messages paged", * notes="", * type="string", * nickname="getUsermessagesPaged", * authorizations=(), * @SWG\Parameter(* name="sessionToken", * description="The token from an active user session", * required=true, * type="string", * paramType="path", * allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" number of messages on page (numMessages & pageNr are ignored if not both are set)", * required=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="pagenumber (numMessages & pageNr are ignored if not both are set)", * required=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (messages => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json with error "not logged in"" ) *) *) */

Does anyone see my mistake?

Any help is welcome.

Sincerely

Update. As suggested, I changed both paramTypes to "query" and changed the path:

@SWG\Api(path="/user/messages/(sessionToken)",

but he didn't work as a fighter.

xdebug in eclipse PDT shows:

RequestURI => /ias/public/user/messages/(sessionToken)

QueryParams => Zend\\Stdlib\\Parameters - *ArrayObject*storage => Array - =>

swagger JSON:

( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "path": "\/user", "description": "Operations about users" ) ], "info" : ( "title": "Mobile access api", "description": "This is the xxx mobile access api.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "comment": "\/**\ * @SWG\\Info(\ * title="Mobile access api",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

Here's the /user output:

( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "path": "/user/balance/(sessionToken)", "operations": [ ( "method": "GET", "summary": "Gets userbalance", "nickname": "getUserdata", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "The token from an active user session" ) ], "responseMessages": [ ( "code": 200, "message": "json (balance => "user_balance")" ), ( "code": 400, "message ": "json with error "not logged in"" ) ], "notes": "", "authorizations": () ) ]), ( "path": "/user/login", "operations": [ ( "method": "POST", "summary": "Logs user into the system", "nickname": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "email", "type": "string", "required": true, "allowMultiple": false, "description": "The user email for login" ), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": false, "description": "The password for login in clear text" ) ], "responseMessages": [ ( "code": 200, "message": "json with session_id, user_id, user_balance" ), ( "code": 400, "message": "json with error "no user with given email and password"" ), ( " code": 400, "message": "json with error "invalid input"" ), ( "code": 400, "message": "json with error "no post request"" ) ], "notes": "" , "authorizations": () ) ] ), ( "path": "/user/logout", "operations": [ ( "method": "POST", "summary": "Logs user out", "nickname" : "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, " allowMultiple": false, "description": "The token from an active user session" ) ], "responseMessages": [ ( "code": 200, "message": "json (result => "deleted")" ), ( "code": 400, "message": "json with error "no user_session with given sid"" ), ( "code": 400, "message": "json with error "invalid input"" ), ( "code ": 400, "message": "json with error "no post request"" ) ], "notes": "", "authorizations": () ) ]), ( "path": "/user/messages/( sessionToken)", "operations": [ ( "method": "GET", "summary": "Gets new messages", "nickname": "getUsermessages", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "The token from an active user session" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json with error "not logged in "" ) ], "notes": "", "authorizations": () ), ( "method": "GET", "summary": "Gets messages paged", "nickname": "getUsermessagesPaged", "type" : "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "description": "The token from an active user session" ), ( "paramType": "query", "name": "numMessages", "type": "string", "required": true, "description": "number of messages on page (numMessages & pageNr are ignored if not both are set)" ), ( "paramType": "query", "name": "pageNr", "type": "string", "required": true, "description": "pagenumber ( numMessages & pageNr are ignored if not both are set)" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400 , "message": "json with error "not logged in"" ) ], "notes": "", "authorizations": () ) ]), ( "path": "/user/userdata", "operations" : [ ( "method": "POST", "summary": "Posts userdata", "nickname": "postUserdata", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "The token from an active user session" ), ( "paramType": "form ", "name": "password", "type": "string", "required": false, "allowMultiple": false, "description": "new password" ), ( "paramType": "form", " name": "address", "type": "string", "required": false, "allowMultiple": false, "description": "new address" ), ( "paramType": "form", "name": "housenr", "type": "string", "required": false, "allowMultiple": false, "description": "new housenr" ), ( "paramType": "form", "name": "zip" , "type": "string", "required": false, "allowMultiple": false, "description": "new zip" ), ( "paramType": "form", "name": "city", "type ": "string", "required": false, "allowMultiple": false, "description": "new city" ), ( "paramType": "form", "name": "email", "type": " string", "required": false, "allowMultiple": false, "description": "new email" ) ], "responseMessages": [ ( "code": 200, "message": "json (user => "userdata ")" ), ( "code": 400, "message": "json with error

It seems like an error that my swagger-ui is not sending any request parameters? Here is an example with one query-param, sessionToken: (controlled by FireBug 2.0.6)

GET /ias/public/user/balance HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: application/json Accept-Language: de, en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/json Referer: http://localhost/ias/swagger/ Cookie: __utma=111872281.581414660.1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Connection: keep-alive

The answer was:

HTTP/1.1 400 Bad Request Date: Tue, 25 Nov 2014 14:58:20 GMT Server: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 Content-Length: 25 Connection: close Content-Type: application/json; charset=utf-8

The answer was correct because no sessionToken was passed.

This requires work, but it doesn't come from swagger-ui:

GET /ias/public/user/balance?sessionToken=HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: text/html,application/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: __utma=111872281.581414660 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Connection: keep-alive

Overview

The built in notification system, first ever in Joomla, allows your app to keep the user (or group of users) informed about various different events. Think of notifications as important alerts that user would be interested in reading and keeping track of it.
Notifications can be generated everywhere. In your component or plugins and later displayed inside JomSocial notification system.
This tutorial will show you how, but since we do not have idea of ​​any third-party component we could use:) the examples will be done on a community plugin which will be triggered at onAfterProfileUpdate event
If you don"t know how to create plugin which will be triggered on this event, we suggest you to check this guide

Implementing it in your component anyway

As stated in overview of this tutorial, we will generate notifications using community plugin.
You will most likely want to create notifications inside your component, or your plugin. The following tutorial will work in any of this cases. You only need to determine at what point in your code the notification will be created and just load the JomSocial Core Libraries file.

require_once JPATH_ROOT . "/components/com_community/libraries/core.php" ;

Following the tutorial explained below will work just fine for your extension too

Preparing the Development Environment

1. We will assume that you"re already created community type example plugin which will be triggered when user changes its profile
If not, you can download empty example plugin from , install it in Joomla and enable the plugin. It is named Community - Notifications Example
2. Navigate to your database and empty these two tables, so they dont have any records at all

A) prefix_community_notification
b) prefix_community_mailq

3. Have at least two (2) users at your test sites and know their ID"s

In earlier versions of Joomla, user ID"s have always started from specified number (62, 42) In Joomla 3, this number will be random, hence, the picture of our testing environment because it will definitely be different at your end.

The First Notification

Open the plugin php file which will be located in ROOT/plugins/community/example
Within the function onAfterProfileUpdate() replace the

CNotificationLibrary::add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

As shown on the example, notification add api have 7 parameters

  • $cmd - is the notification type. You can see all notifications types in this file. ROOT/components/com_community/libraries/notificationtypes.php starting from, or around line 53. We recommend using system_messaging notification type.
  • $actor - is the person who carry out the action
  • $target - is the person, or group of people that will receive notification
  • $subject - is the notification subject, in both, notification popup window and the email title
  • $body - is the body of email notification message
  • $template - if you need specific template to use, you can define it here. Otherwise, this parameter can be empty
  • $params - custom defined parameters
  • Knowing all this, lets define the variables we will use
    Change your plugin code to:

    $user = CFactory::getUser();

    $cmd = "system_messaging" ;
    // first param, type of activity $actor = $user -> id ;

    //second param - get the id of $actor $target = "965" ;

    // third param. Who receive notification? In our dev environment, its admin user with id 965. At your environment, you will most likely want to get the ID from your object or from array of users.


    $subject = "Notification Subject" ;

    // Subject of both, email and popup notifications $body = ;

    //Body message in emails.

    $template = "" ;

    // If you need to use specific jomsocial template file, you can define it here.

    $params = new CParameter("" ) ;
    // We want to create an additional params object, and assign data to it, without having to formally define a class CNotificationLibrary:: add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

    $actor = CFactory::getUser();

    • $link = "http://www.google.com" ; ); $params = new CParameter("" ) ;
    • $params -> set ("actor" , $actor -> getDisplayName () ) ;
    • // can be used as (actor) tag $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ;
    • // Link for the (actor) tag $params -> set ("url" , $link ) ;

    //url of the whole activity. Used when hovering over avatar in notification window. Can be used as (url) tag in outgoing emails too. Make sure that you have defined $link variable:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "Notification Subject" , "This is the notification body message" , "" , $params ) ; $params = new CParameter(- We want to create a new params object, and assign data to it, without having to formally define a class.

    $params->set("actor", $actor->getDisplayName());

    - Your notification should always have an actor. This param can be passed to template as (actor) tag. In notification window, it defines the user that carries an action.
    $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - Actor URL is usually the url of an actor. In notification popup, it adds the link to the (actor) element$params->set("url", $link);

    - This is the most important parameter you must always set properly. In notification window, this param is used over the avatar image. In email notification, it echoes the location where activity occurred.

    For this example, we will set variable $link to lands on

    www.google.com"

    so you can see how it works
    In notification window when hovering over avatar, notice the (url) param kicked in and adds the link to google over avatar. It is intentional, because we made it that way:)


    ]

    In the same window, when hovering over actor link. This is the part where (actor) echoed the user that carries an action, while (actor_url)" taken care that object is linked properly


    Lets see what happens in the email queue


    And finally, the actual email that is sent to end user


    Success
    Till now, we created three (3) parameters that are successfully used in notification window, and emails.

  • (actor) - Returns the username of the user which carries the action
  • (actor_url) - Gives the attribute to the (actor)
  • (url) - Is not mandatory, but you should always have it in your notification. It is the main url where action that we are notified about happened.
  • Similarly, you can define "

    • (target) - if you need it
    • (target_url) if you need it in your notification.
    • (title) - Commonly used to refer to an object that generated notification. Example: "User X posted new photo in Album Y." Album Y is title here
    • (title_url) - As with previous ones, the url of an object that generated notification.
    • (message) - This param can be used to set (and echo) the message in the body of JomSocial email.
    3.3K

    Displaying messages to the user is a fairly common action that a web application should perform. It can occur when processing forms, it can be error messages, messages that tell you to register when a user tries to access a restricted part of the site, and in many other cases.

    Very often, the creation and output of messages are separated into different HTTP requests. As a rule, it is convenient to use a redirect after processing forms (to avoid problems with the Back and Refresh buttons), but at the same time, the natural moment for creating a message is precisely the moment of processing forms and performing actions accompanying it. Why? Imagine that the message text should look something like this: “The number of units ordered for the item ‘Mouse Pad’ has been successfully changed from 7 to 12.” After a redirect, perhaps to a completely different page in terms of functionality, it will be an extra headache to determine what was done before.

    Most often, messages are displayed in the POST request that processes the form - this is not good, the words “this page is out of date” ruin life (when the user decides to try the Back button).

    Someone uses a redirect, giving up on friendly messages.

    At the same time, there is a simple and obvious way to make life better. Despite the obviousness, for some reason I never saw anyone use it - at least when I looked at other people's sources.

    So, we have a problem - the message must “live” in different requests. We need a mechanism to transfer the text of the message to the page that should display it. You probably already remembered about the sessions.

    Yes, in general you are right. Other methods, for example through a global variable, do not allow saving data in the case when a redirect is used (note by Maxim Naumenko). Plus, I usually make sure that each screen in the application has the ability, along with other information, to display messages that were generated on previous screens. This is convenient because there is no need to prepare separate screens for displaying messages, and the user does not have to click the mouse again. But, really, the designer needs to think here - to highlight the area in which messages would appear.

    The idea is very simple and can be implemented with a couple of classes.

    The first thing that comes to mind is to create a Message class, which would, in fact, represent a message in our simple class diagram. The message must be able to save itself in the session, as well as display itself on the screen.

    class Message ( /** * Message content. */ var $content; /** * Constructor for initializing the message text. * * @param content message content */ function Message($content) ( $this->content = $content ; ) /** * Write a message to the session. */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Output a message to the page */ function toPage() ( echo. " - " . $this->content .
    "; } }

    The $_SESSION variable is used to access the session.

    Note that $_SESSION is an array, we are using just one element of this array with the index ‘session_message’.

    In this case, we are dealing with an “array of arrays” - what we store in the ‘session_message’ element is an array, this is the list of transmitted messages (of course, there can be several of them).

    If you couldn't find the thread, it's time to brush up on the sections of the manual dedicated to sessions and arrays.

    You may have a question. Why are classes needed here? It would be possible to get by with two functions. But let's look further. We may need to create messages with different types (info, error, warning), and determine message recipients.

    Please note that at the moment it is not the object itself that is put into the session, but only the message text. OOP allows us to later change the behavior of the send() method without changing the client code that accesses this method (for example, in the future we can write the entire Message object to the session if it has many fields).

    Let's imagine that we would do this using functions. We would probably have a message_send($txt) function, and also a message_to_page($txt) function. Now we need to add the ability to have different behavior for different types of messages. Function calls change: message_send($txt, $kind), message_to_page($txt, $kind). You will have to comb through the entire application code in search of such functions, making corrections.

    This can be avoided by anticipating the situation in advance by presenting the message as an associative array: $msg[‘txt’], $msg[‘kind’], then there will be only one parameter in function calls. Can you feel how this is trying to become a class?

    So, OOP gives you the opportunity to have the luxury of not thinking through everything in advance.

    The next class - Inbox - is designed just for this.

    class Inbox ( /** * Array of received messages. */ var $messages = array(); /** * In the constructor, we get all received messages * and delete them from the session. */ function Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->messages = new Message($messages[$i]);
    ) ) /* clear the messages array */ $_SESSION["session_messages"] = array();< $co; $i++) { $this->) /** * Display the contents of the Inbox on the page.

    */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Message from the system:

    "; ) for ($i = 0; $i

    messages[$i]->ToPage();

    ) ) )

    Now imagine that you are creating a complex portal, where, as a rule, there are several blocks on the pages, and each one can contain a separate application.

    Here we encounter two difficulties:

    * I would like the list of messages to appear in a specific part of the page, and you have already found a good place for this.
    The problem is that you need to run the $inbox->toPage() command at exactly the moment that would correspond to the position of the list of messages on the page. If we want to change the position of this list, we will have to go into the code, but it is not good to constantly change the portal frame for this. The best solution would be to make the output of messages in the form of a separate module, which we only know that it needs to be connected to the framework.
    That is, free yourself from the strict sequence of launching modules. Indeed, since the result of the Inbox output does not depend on the operation of the system (at this step we already have all the data in the session), then why the extra complexity?
    * To maintain the appearance (design) of the message list, you need to take care of the HTML code, which is hardcoded in the toPage() methods of the Message and Inbox classes. Typically, you will have to change the PHP code in order to change the design.

    To try to solve the first problem, you can create a buffer that stores the result of the Inbox output.

    Perhaps we will still have several similar (to Inbox) things, and we need to create a buffer system. In order not to confuse whose output is whose, we will probably come to naming the buffers. We will store somewhere the sequence in accordance with which the buffers should be output - preferably in an external file to make changes easier.

    This attempt at a solution already gives us the idea of ​​using XML as a means of storing intermediate data. And using XSLT styles will help solve the second problem.

    I will not dwell on what XML is and what XSLT is. If you're not familiar with these things, zvon.org is a good place to start looking.

    The idea is to generate not HTML code, but an XML structure in the toPage() methods. The page document will be created as a string with XML code (it will serve as a “buffer”), and at the last stage of the script we will use an XSL transformation.

    First, let's imagine what should be the result of the main part of the code.

    minute 57 second: 45

    What it is is quite easy to guess - two messages and a form. Please note that the PHP script only needs to prepare such a string - it is very simple. Moreover, the order of the main tags is not important - you can put them first, for example, as will be convenient for the programmer. How to implement it. You can, without changing anything, use output buffering, output XML instead of HTML code, and at the end simply capture the output into a string. But then we will lose flexibility - for example, sometimes you want to output debugging information directly to the page (using echo). At the same time, PHP developers are working on a DOM module that offers a more advanced way of creating and passing tree documents. If we want to implement the DOM, we will have to redesign the entire application, changing the output of strings to the creation of DOM elements. Therefore, I prefer to store the XML representation of objects within the objects themselves, sequentially assembling a common XML document. It's not that difficult, it just needs a little modification. You will see that this technique is not strictly tied to a specific way of storing XML data, and this will allow you to make the transition to using the DOM with little effort. First of all, notice that each of our objects has a toPage() method. This similarity should make us think about introducing a new common parent class. Let each class that can create pieces of an XML document for a page inherit from a class that will take care of the XML representation of the object. Let's call it Outputable.

    class Outputable ( /** * XML container (string). */ var $output = ""; /** * Give the contents of the container and clear the container. * * @return a string with XML data */ function getOutput() ( $ out = $this->output; $this->output = ""; return $out; ->output .= $string . "n" ) /** * "Abstract" method */ function toPage() ( ) )

    The toPage() method is made empty - in this case it is needed as an indicator of how external “matryoshka” classes should communicate with the inner class. However, we could offer a default implementation here if we noticed that there are many objects that display themselves on the page in the same way.

    The Message and Inbox classes will change slightly - they should now both inherit from Outputable, and the toPage() methods will also change
    Message.php

    class Message extends Outputable ( /** * Message content. */ var $content; /** * Constructor for initializing the message text. * * @param content message content */ function Message($content) ( $this->content = $content; ) /** * Write a message to the session */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Output a message to the page. ( $this->appendOutput("".$this->content.""); ) )

    class Inbox extends Outputable ( /** * Array of received messages. */ var $messages = array(); /** * In the constructor, we receive all received messages * and remove them from the session. */ function Inbox() ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->messages = new Message($messages[$i]);< $co; $i++) { $this->) ) /* clear the messages array */ $_SESSION["session_messages"] = array();

    ) /** * Display the contents of the Inbox on the page.

    */ function toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i
    messages[$i]->toPage();

    $this->appendOutput($this->messages[$i]->getOutput());

    ) $this->appendOutput("");

    ) )
    The output method has changed - now, instead of directly outputting to the page, the external representation is for the time being stored in Outputable, which “sits” in each of the objects. The appendOutput() method serves as a replacement for the echo() construct. To get the output of an object, the getOutput() method is used.

    Now let's see what the client part of the code is, which will solve the same problem as before.

    index.php

    The main innovation is in the $global_content object, the name of which speaks for itself. In this case, it belongs to the Outputable class; in real-life tasks, you would probably create a separate class for the page content.

    If you look closely, the content of the script has practically not changed - the same inbox, the same toPage(). Added an instruction that displays the contents of the message list in the page content. For variety, two messages are now generated.

    Any module that generates XML data as a result of its work can be used in a project. By the way, this is one of the advantages over template engines, in which data creation consists of a sequence of calling methods (assign, etc.) of a specific engine, for which there is no common standard.

    Another advantage is ease of debugging. If you run the script, you will notice that each page contains debug output - an XML prototype that greatly simplifies debugging applications.

    Something else you need to think about is how to create message objects. It is not always convenient to use new directly in client code. But perhaps this is a topic for a separate article.

    Finally, a gallop about the prospects:

    * pop-up windows for a list of important messages
    * "sender pages" and "destination pages" in messages
    * logging messages in the database
    * button "show history of my actions"
    * statistical analysis of user actions within sessions
    * "intelligent assistants" in web applications

    In the end, I realized: you couldn’t find anyone better than your wife. All that's left is to find a wife

    PHP AJAX CRUD: creating, deleting, editing records in the MySQL database

    In this article, we will learn about how to add, edit and delete records in a MySQL database using PHP. We used a JQuery handler that sends an AJAX request to a server-side script. The handler updates the list of records.

    AJAX form for sending requests for creation, deletion, editing

    When adding a record, the form sends data to the PHP script via an AJAX request. If the addition is successful, the list of entries is reloaded.

    JQuery AJAX functions for CRUD database query

    In JQuery AJAX function we have switch cases add edit and delete. These cases generate different query and response data strings depending on the database actions.

    function showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) function cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(message); $("#frmAdd").show(); function callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "add ": queryString = "action="+action+"&txtmessage="+ $("#txtmessage").val(); break; case "edit": queryString = "action="+action+"&message_id="+ id + " &txtmessage="+ $("#txtmessage_"+id).val(); break; case "delete": queryString = "action="+action+"&message_id="+ id; break; ) jQuery.ajax(( url: "crud_action.php", data:queryString, type: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show();

    break;

    case "delete": $("#message_"+id).fadeOut();

    break;



     

    ) $("#txtmessage").val("");