[問題]WebService與Json的問題\

看板C_Sharp作者 (愛玩又愛吃)時間7年前 (2017/03/02 00:36), 編輯推噓4(4017)
留言21則, 6人參與, 最新討論串1/1
各位先進們好 小弟最近在嘗試用ajax與webservice來做互動 但在過程中 只要是碰到要傳遞json格式的資料 就會一直出現 [object Object] 500 Internal Server Error 在網路上也找了好多方法 但怎麼試還是出現上面的錯誤 以下是我的寫法 還請各位指導那些地方寫錯需要改進的 webservice部分我用了JSON.NET提供的方法以及內建的JavaScriptSerializer javascript: $(document).ready(function () { $("#bt1").click(function () {Json()}); }); function Json() { var person ={req:{age: "10",name: "小傑",id: "TT-541"}}; $.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', dataType: 'json', data: JSON.stringify(person), url: 'ForAJAX.asmx/GetJson', success: function (data) { var tmp = JSON.parse(data.d); $("#content").text(tmp[0].name+"--"+tmp[0].id+"--"+tmp[0].age); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr + "\n" + xhr.status + "\n" + thrownError); } }); } WebService: using System.Web.Script.Serialization; using Newtonsoft.Json; [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string GetJson(string req) { var mm = JsonConvert.DeserializeObject<Member>(req); Member[] mem1 = new Member[]{new Member(){age=mm.age,id=mm.id,name=mm.name}}; JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(mem1); } public class Member { public string name; public string id; public string age; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.153.198 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1488386168.A.B09.html

03/02 00:37, , 1F
不考慮把webservice的部分改成用web API?
03/02 00:37, 1F

03/02 00:44, , 2F
因為剛接觸.NET不久,本來只會寫aspx及cs,最近想試
03/02 00:44, 2F

03/02 00:46, , 3F
試用ajax來達到畫面不閃的結果而已,WEBAPI及MVC感
03/02 00:46, 3F

03/02 00:46, , 4F
覺還是太難
03/02 00:46, 4F

03/02 01:06, , 5F
var person = {age: "10",name: "小傑",id: "TT-541"};
03/02 01:06, 5F

03/02 01:06, , 6F
data: "req:'" + JSON.stringify(person) + "'",
03/02 01:06, 6F

03/02 01:06, , 7F
試試看把person和data改成上述格式
03/02 01:06, 7F

03/02 07:18, , 8F
還是不行耶 錯誤訊息仍是跟上述一樣
03/02 07:18, 8F

03/02 09:51, , 9F
不考慮使用ashx來做嗎?
03/02 09:51, 9F

03/02 09:59, , 10F
client跟server的domain是一樣的嗎?
03/02 09:59, 10F

03/02 11:28, , 11F
阿...data的值忘記用大括號包起來了
03/02 11:28, 11F

03/02 11:30, , 12F
或是用你原本的寫法也可以,但是webmethod的req型態要改
03/02 11:30, 12F

03/02 11:30, , 13F
成object,不然會對應不到
03/02 11:30, 13F

03/02 13:15, , 14F
你req要傳字串,但你傳的是一個json object阿
03/02 13:15, 14F

03/02 19:42, , 15F
總算成功了 謝謝各位先進提供的建議
03/02 19:42, 15F

03/02 19:43, , 16F
傳進來一樣是用string接 改成object後面會無法解析
03/02 19:43, 16F

03/02 19:43, , 17F
Member mm1 = JsonConvert.DeserializeObject<Member
03/02 19:43, 17F

03/02 19:43, , 18F
>(req);
03/02 19:43, 18F

03/02 19:43, , 19F
Member mm2 = JavaScriptSerializer.Deserialize<Mem
03/02 19:43, 19F

03/02 19:43, , 20F
ber>(req);
03/02 19:43, 20F

03/02 19:44, , 21F
這兩種方式都可以成功解析 並且讀取裡面的值
03/02 19:44, 21F
文章代碼(AID): #1OjlXui9 (C_Sharp)