0

I am using AJAX to pass a JSON Array to a .NET web service. The Stringified JSON array is correct when sent - I show the content in a JS alert - but when I output it within the web service, it just displays null values.

Help.

The JS is this:

 var listitems = [];
 $('#job-item-list').children('.iamalistitem').each(function () {
 listitems.push({ "title": $(this).find('.job-item-title').text(), "price": $(this).find('.job-item-price').text().replace("£","").replace("£","") });
 });
 alert(JSON.stringify({ ListItems: listitems }));
 $.ajax({
 type: "POST",
 url: "/ld_jobs.asmx/putJobItems",
 // The key needs to match your method's input parameter (case-sensitive).
 data: JSON.stringify({ ListItems : listitems }),
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function (response) {
 var responseObjTwo = JSON.parse(response.d);
 //showUserMessage(responseObjTwo.Message, false);
 showUserMessage(response.d, false);
 },
 error: function (response) {
 var responseObj = JSON.parse(response.responseText);
 showUserMessage(responseObj.Message, true);
 }
 });

The receiving service is this:

 public class ListItem
 {
 public string itemTitle { get; set; }
 public decimal itemPrice { get; set; }
 }
 [WebMethod]
 [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
 public string putJobItems(ListItem[] ListItems)
 {
 // Add to DB
 int errorNumber = 0;
 try
 {
 // check if on DB already
 string returnstring = "";
 errorNumber++; //1
 foreach (ListItem item in ListItems)
 {
 errorNumber++; //2,3,4
 returnstring += "Desc: " + item.itemTitle + "; Price: " + item.itemPrice.ToString() + "; ";
 }
 errorNumber++; //5
 return "{ \"Status\" : \"Success\", \"Message\" : \"Your request has been successfully posted. Well done you. Go put the kettle on and be lazy! \", \"input\" : \"" + returnstring + ": " + errorNumber.ToString() + "\" }";
 }
 catch (Exception ex)
 {
 Exception newEx = new Exception("Well this is quite embarassing. It seems the badgers have escaped! (Actual error: " + ex.Message + "; error: " + errorNumber.ToString() + ")");
 throw newEx;
 }
 }

The Stringyfied field going in is:

{"ListItems":[{"title":"(Groceries) 4 pints of milk","price":"2.00"},{"title":"(Groceries) 2 loafs of bread","price":"3.00"},{"title":"(Subway) Foot Long BMT","price":"3.00"}]}

Response.d comes back as:

{ "Status" : "Success", "Message" : "Your request has been successfully posted. Well done you. Go put the kettle on and be lazy! ", "input" : "Desc: ; Price: 0; Desc: ; Price: 0; Desc: ; Price: 0; : 5" }

Any help greatly appreciated. Thanks.

asked Aug 26, 2012 at 18:14
2
  • have you debug it and check that you are getting data in your listItem in web service ? Commented Aug 26, 2012 at 18:23
  • I have and the values are not there, but what I can't work out is that fact that it always has the correct number of items in the ListItem[] array, but they are all null...I can't figure out why it would not be receiving the actual data, but still have the correct number of items in the list? Commented Aug 26, 2012 at 18:27

1 Answer 1

1

You are use title and price properties names on client but itemTitle and itemPrice on server. Adjust them to use same names.

answered Aug 26, 2012 at 18:41
1
  • Just figured that out, as you posted! Rookie error! Thanks. All working now! ** Little Embarrassed ** Commented Aug 26, 2012 at 18:47

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.