作者eatPLAYlove (愛玩又愛吃)
看板C_Sharp
標題[問題]WebService與Json的問題\
時間Thu Mar 2 00:36:05 2017
各位先進們好
小弟最近在嘗試用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
推 J002: 不考慮把webservice的部分改成用web API? 03/02 00:37
→ eatPLAYlove: 因為剛接觸.NET不久,本來只會寫aspx及cs,最近想試 03/02 00:44
→ eatPLAYlove: 試用ajax來達到畫面不閃的結果而已,WEBAPI及MVC感 03/02 00:46
→ eatPLAYlove: 覺還是太難 03/02 00:46
推 auhgnim: var person = {age: "10",name: "小傑",id: "TT-541"}; 03/02 01:06
→ auhgnim: data: "req:'" + JSON.stringify(person) + "'", 03/02 01:06
→ auhgnim: 試試看把person和data改成上述格式 03/02 01:06
→ eatPLAYlove: 還是不行耶 錯誤訊息仍是跟上述一樣 03/02 07:18
推 Laluth: 不考慮使用ashx來做嗎? 03/02 09:51
→ brian80122: client跟server的domain是一樣的嗎? 03/02 09:59
推 auhgnim: 阿...data的值忘記用大括號包起來了 03/02 11:28
→ auhgnim: 或是用你原本的寫法也可以,但是webmethod的req型態要改 03/02 11:30
→ auhgnim: 成object,不然會對應不到 03/02 11:30
→ Litfal: 你req要傳字串,但你傳的是一個json object阿 03/02 13:15
→ eatPLAYlove: 總算成功了 謝謝各位先進提供的建議 03/02 19:42
→ eatPLAYlove: 傳進來一樣是用string接 改成object後面會無法解析 03/02 19:43
→ eatPLAYlove: Member mm1 = JsonConvert.DeserializeObject<Member 03/02 19:43
→ eatPLAYlove: >(req); 03/02 19:43
→ eatPLAYlove: Member mm2 = JavaScriptSerializer.Deserialize<Mem 03/02 19:43
→ eatPLAYlove: ber>(req); 03/02 19:43
→ eatPLAYlove: 這兩種方式都可以成功解析 並且讀取裡面的值 03/02 19:44