Not Receiving JSON object into my Zend Controller - json

Am am successfully parsing and sending JSON values from my client for my server side controller to receive and decode
$("#test2").click(function() {
$.ajax({
type: "POST",
url: "<?php echo $this->baseUrl() ?>/expensetypes/add",
data: JSON.stringify(wrapFormValues($('#expensetypes'))),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
});
However in my controller the code $this->getRequest()->getPost() doesn't seem to receive the JSON object that my client is sending though Firebug clearly shows that my JSON object is being parsed and sent.
What am I missing?

try
print_r($this->getRequest->getParams());
and see what that shows you

Related

Send JSON as POST to Django using Ajax

I'm looking to send some JSON POST data to a URL in Django which enforces CSRF protection. My Ajax looks like this:
$.ajax({
type: "POST",
url: '/change_ref/'+hash+"/",
data: {"csrfmiddlewaretoken": "{{ csrf_token }}", "new_ref": newref},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
$('#changeref').modal('hide');
alert('Success!');
},
failure: function(errMsg) {
alert('Failure! ' +errMsg);
}
});
My idea is to then parse the JSON on the backend. However, when I examine the POST data passed to the server, it is empty (as seen by CSRF middleware):
This happens also when I wrap the JSON data with JSON.stringify(). The only way I have POST requests working so far is with application/x-www-form-urlencoded Mimetype, but this is undesirable.
My settings.py is pretty vanilla. Are there any extra steps needed in order to make JSON POSTs in Django, or is there something blatantly wrong with this code?
Thanks
CSRF token should be in HTTP header, so also ContentType
var csrftoken = Cookies.get('csrftoken');
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
xhr.setRequestHeader("content-type", "application/json");
}
}
});
You're not sending form-encoded data, so request.POST is not used. Get it from request.body instead.

how to return json from groovy please?

My environment is openjdk version "1.7.0_75", tomcat-7.0.82, groovy-2.4.13, jquery-3.2.1.
Now I want use ajax post some data to groovy, and want groovy return json to ajax.
Ajax:
$.ajax({
type: "post",
contentType: "application/json; charset=UTF-8",
url: "edit.groovy",
data: json,
dataType: 'json',
success : function(data) {
console.log('ok');
},
error: function(data) {
console.log('err');
}
});
And edit.groovy:
response.contentType = 'application/json';
out << "{rs: 2}";
My question is, why the log is 'err', is my groovy return a right json type please? How to fix it please?
"{rs: 2}"
Isn't valid json the name had to be in double quotes
'{"rs": 2}'
Just use a builder with a map, and it will be done for you
new JsonBuilder([rs: 2]).toString()

How to Post JSON Data to server in phonegap

hi i write in this code but i get Error like UNdefined how we can resolve this issue if any one know this answer plz let me know
$.ajax({ type: "POST", contentType:"application/json; charset=utf-8", dataType: "application/json", url:"some url",
data :{familyVoterId:'0',boothId:'0',voterId:'59136604',previousEnrollmentNumber:'29422415',casteId:'62',street:'hamlet',voterRelationId:'8',cadrePrevYear:'',relativeName:'DESSAPPA',previousRollesList:[{fromDateStr:'2012-10-24',cadreRoleId:'1',cadreCommitteeId:'1',cadreCommitteeLevelId:'1',toDateStr:"2013-10-24"}],partyMemberSinceStr:"2001-10-24",uniqueKey:"10d11073-a8b1-4764-bf2f-e2c0a269e9cd",nameType:"Voter",panchayatId:"0",age:28,surveyTimeStr:"2014-10-24 15:05:15",gender:"M",relationTypeId:8,bloodGroupId:3,dobStr:"1968-02-02",nomineeGender:"1",photoType:"VOTER",voterCardNumber:"UXN0862806",longititude:"78.413",aadheerNo:"987654321",candidateAadherNo:"12345678910",educationId:"2",nomineeAge:"21",previousParicaptedElectionsList:[{"electionTypeId":17,candidateId:"30126",constituencyId:"461"}],voterName:"RAMAKRISHNA",occupationId:"1",houseNo:"3-60",cadreFamilyDetails:[],createdUserId:"152",refNo:"TR-T-9999-12985",constituencyId:"282",latitude:"17.4278",nomineeName:"nominee",mobileNumber:"9999999999"},
success: function(data)
{
alert("success");
},
error: function(msg)
{
alert(msg.message);
}
});
Also, in addition, the reason it is failing in the first place is because you need to do a cross-domain post. In order to do this correctly through jQuery, you need to use the following options:
dataType: 'jsonp',
cache: false,
I reproduced your error. In Chrome if you click inspect element and then select the Console tab you can see the error message :
XMLHttpRequest cannot load file:///D:/DeleteME/pyMail/some%20url.
Cross origin requests are only supported for protocol schemes: http,
data, chrome-extension, https, chrome-extension-resource.
As mentioned before you need to specify the data type as jsonp if your are posting to another domain.
Example:
$.ajax({ type: "POST", contentType:"application/jsonp; charset=utf-8", dataType: "application/json", url:"http://www.google.com",
data :{familyVoterId:'0',boothId:'0',voterId:'59136604',previousEnrollmentNumber:'29422415',casteId:'62',street:'hamlet',voterRelationId:'8',cadrePrevYear:'',relativeName:'DESSAPPA',previousRollesList:[{fromDateStr:'2012-10-24',cadreRoleId:'1',cadreCommitteeId:'1',cadreCommitteeLevelId:'1',toDateStr:"2013-10-24"}],partyMemberSinceStr:"2001-10-24",uniqueKey:"10d11073-a8b1-4764-bf2f-e2c0a269e9cd",nameType:"Voter",panchayatId:"0",age:28,surveyTimeStr:"2014-10-24 15:05:15",gender:"M",relationTypeId:8,bloodGroupId:3,dobStr:"1968-02-02",nomineeGender:"1",photoType:"VOTER",voterCardNumber:"UXN0862806",longititude:"78.413",aadheerNo:"987654321",candidateAadherNo:"12345678910",educationId:"2",nomineeAge:"21",previousParicaptedElectionsList:[{"electionTypeId":17,candidateId:"30126",constituencyId:"461"}],voterName:"RAMAKRISHNA",occupationId:"1",houseNo:"3-60",cadreFamilyDetails:[],createdUserId:"152",refNo:"TR-T-9999-12985",constituencyId:"282",latitude:"17.4278",nomineeName:"nominee",mobileNumber:"9999999999"},
dataType: 'jsonp',
success: function(data)
{
alert("success");
},
error: function(msg)
{
alert(msg.message);
}
});
Message is not a property of the XHR object msg in your error callback function. That is why it shows undefined in your alert box. You can try to alert msg.statusText and see the status text.
Please check the documentation http://api.jquery.com/jquery.ajax/
(The jqXHR Object section)

Web service call from .ajax, maxJsonLength error

I'm using .asmx web service and web service method can serialize to json string(3506 record) by using JavaScriptSerializer class and i don't get any error from VisualStudio.
On the other hand my phonegap app using this service and i can consume with that. But my last method contents 3506 records and when i call this method from javascript i get
"error during serialization or deserialization using the json
javascriptserializer"
error.
Should i use paging or smth on web service? If yes can anybody tell me how to do that? Like i said i can use this method from browser. i can get this error when i call on javascript.
$.ajax({
type: "POST",
url: "WEB_SERVICE_URL",
data: "{ dummyParameter:dummy }",
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function() {
app.showLoading();
},
success: function(msg) {
clCard = JSON.parse(msg.d);
alert(clCard.length);
},
complete: function() {
app.hideLoading();
},
error: function(msg) {
app.hideLoading();
alert('Error');
}
});
Please have a look at this. I think helped you.

how to set jsonp callback in retrieving restful web service data via jquery

I have asked a question regarding invalid label on firebug which happens when I try to retrieve data from my restful web service. Most of the answers I received was about setting a callback function. but I can't seem to get the right juice from it. can you show me an exact code on how to do it? or atleast correct the code here:
type: "GET",
cache: false,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
processdata:true,
jsonp: false, jsonpCallback: "success",
url: 'http://localhost:8732/Service1/data/10',
success : function success(data) {
jsonResponse = eval("(" + data + ")");
alert(jsonResponse)
},
error : function(req,status, ex) {
alert(ex);
}
Thanks,
Wow, you've got a lot of unnecessary stuff there. Try this:
$.ajax({
url: 'http://localhost:8732/Service1/data/10',
dataType: 'jsonp',
error: function(req, status, ex) {
// your code here
},
success: function(data) {
//your code here
// Please note: you don't need to 'eval' the json response.
// The 'data' variable will be loaded with the object that the json string represents.
// By the way, don't use 'eval', ever.
}
});
jQuery will take care of the callback on the url. See here: http://api.jquery.com/jQuery.ajax/
UPDATE
Why jsonp? If you're getting this from localhost, why not just json? As discussed in the comments below, your server currently is not capable of a jsonp response, but it can do json.