Hi Krishnakant,

I think this is not a plyons issue, but a javascript issue.

The javscript function that performs the ajax call and processes the
json response should end with a

   return false;


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

Then your browser does not try to display/save the json resonse.

Moreover: If you are dealing with JSON, i recommend using firefox and
the jsonview plugin!

Kind regards
Cornelius

Am 29.07.2011 11:58, schrieb Krishnakant Mane:
> 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.
>
>
>


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to