Hello all.
I have recently observed that when an action returns json instead of a mako template, the behaviour is highly inconsistent.
The problem is like this.
One of my mako template sends an ajax submit request (using jquery) to an action controller.

Users of jquery will know that we use some kind of an after submit event to process the returned json object.
in my case it is called success function.
Now what is happening is the following.
I often get a save dialog when the success function fires after submit.
I know its a json object that my action controller returns.

As a part of investigation,  I did download that text file.
I found that the text file exactly contains the key: value pare that should have been otherwise processed safely as json. Meaning the problem seems to be between the communication from action to the mako template.
Is there any known inconsistency with ajax submit?
or am I missing a trick?
I am paisting the code snippit of the controller action and that part of the mako template which is concerned with processing of the returned jason.
Note that in my action, I don't have an @jsonify at the top.
This is compensated by the dumps function used in the controller.
The decision to do so is because once I had removed @jsonify and it started to work.
But again this problem and I don't  know why.
Actually we are approaching a deadline and this error has again come up unexpectedly.
So we as a team are really desperately looking for some pointer.
Any help will be appreciated more than gold and silver.

following is the controller action.
This is an accounting software and the code I am paisting is the action that calls a rpc method from another server.
This action saves a transaction between  2 accounts.
It does so by sending the data to the rpc server.
Here goes the  code.


def setVoucher(self):
        c.flag = "n"
        # Add Contra Voucher.
        if c.flag == "n":

            #self.vouchertype =request.params["voucherflag"]
            # get current date
            #print request.params
            self.date=str(strftime("%Y-%m-%d %H:%M:%S"))
self.datepicker = request.params["dated"] + "-" + request.params["datem"] + "-" + request.params["datey"] date_of_transaction = datetime.datetime.strptime(str(self.datepicker),"%d-%m-%Y").strftime("%Y-%m-%d %H:%M:%S") self.queryParams_master=[str(request.params["reference_no"]),self.date,date_of_transaction,request.params["narration"]]
            #print self.queryParams_master

            self.queryParams_details = []
            length = request.params["rowslength"]


            for i in range(1,int(length)):

                if str(request.params["crdr"+str(i)]) == 'Cr':
queryParams_details =[request.params["crdr"+str(i)],request.params["acc"+str(i)],request.params["cr"+str(i)]]
                if str(request.params["crdr"+str(i)]) == 'Dr':
queryParams_details =[request.params["crdr"+str(i)],request.params["acc"+str(i)],request.params["dr"+str(i)]]
                self.queryParams_details.append(queryParams_details)

            #print request.params["vouchertype_flag"]
            self.queryParams=[request.params["vouchertype_flag"]]

trial = app_globals.server_proxy.cashbook.setCashBook(self.queryParams_master,self.queryParams_details,session["gnukhata"]) res = app_globals.server_proxy.voucher.setVoucher(self.queryParams,session["gnukhata"])

            if res == True:
                for r in self.queryParams_details:
                    if r[0] == 'Cr':
app_globals.server_proxy.account.updateAccountBalance([r[1],r[2],'craccount'],session["gnukhata"])
                    else:
app_globals.server_proxy.account.updateAccountBalance([r[1],r[2],'draccount'],session["gnukhata"])
            #print self.queryParams
data = {"message":"Voucher has been saved","vouchertype_flag":self.queryParams}
            response.headers["Content-Type"] = "text/json"
            return simplejson.dumps(data)

Look at the way headers are set and the call to the dumps.

Now the concerned mako code.


Look at the success function.
YOu can easily see whats going on there, and I guess it was pritty streight forward.
Yet this problem.


    var options = {

        beforeSubmit:  validateForm, // pre-submit callback
        success: function(data){
//the below code just appends the value fromm the key message to the span called voucher_warning.
            $("#voucher_warning").append(data["message"]);
            //alert(data["vouchertype_flag"]);
document.getElementById("vouchertype_flag").value = data["vouchertype_flag"];
            acc=[];
            total_credit = 0;
            total_debit = 0;
            var table = document.getElementById("dataTable");
            var rowCount = parseInt(table.rows.length) - parseInt(2);
                    for(var i=1; i<rowCount; i++)
                    {
                        table.deleteRow(i);
                        rowCount--;
                        i--;
                    }
            document.getElementById("total_credit_row").innerHTML = "0.00";
            document.getElementById("total_debit_row").innerHTML = "0.00";
            $("input#reference_no").focus();
        },
        clearForm:true // clear all form fields after successful submit

            };

    $('#submit').click(function(){
    $('#voucher').ajaxSubmit(options);//on submit button click event
    });



Happy hacking.
Krishnakant.



--
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to