我正在尝试使用javascript $ .Ajax调用从Web服务获取JSON。
<script type="text/javascript">
$(function () {
$("#" + "@Model.BidObjectId").submit(function () {
alert("Test");
var param = { 'id': "@Model.BidObjectId" };
$.ajax({
url: "http://localhost:11523/Service1.svc/GetBidObject",
dataType: "jsonp",
contentType: "application/json;charset=utf-8",
type: "GET",
data: JSON.stringify(param),
success: function (msg) {
alert("success");
if (msg != null) {
return msg.URL;
}
},
error: function (msg2) {
alert(msg2);
}
});
return false;
});
});
</script>
我总是使用parsererror进入错误场景
status:200 statusCode:function(map){statusText:“parsererror”
我已经阅读了解释here但我不能使用JSON,因为这会创建一些OPTION调用。我已经尝试将POST更改为GET,以几种不同的方式返回数据(创建类等)但我似乎无法弄清楚问题是什么。只有JSONP的解决方案似乎同意进行正确的GET或POST。其他解决方案甚至都找不到我的网络服务。
以下是我的网络服务的代码:
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetBidObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string[] GetBidObject(string id);
与
public string[] GetBidObject(string id)
{
BidObject bidobject = new BidObject() { BidObjectId = 1, Title = "callback" };
JavaScriptSerializer ser = new JavaScriptSerializer();
string result = ser.Serialize(bidobject);
List<string> listResult = new List<string>();
listResult.Add(result);
return listResult.ToArray();
}
我不使用ASP.NET但使用Razor。
[编辑]
如果我在Fiddler中通过json更改jsonp,我可以使用chrome读取我的OPTIONS http://localhost:11523/Service1.svc/GetBidObject?{%22id%22:%220%22} HTTP/1.1
调用。在IE Fiddler中没有检测到任何东西。 ajax调用从未完成......我真的不明白。
答案 0 :(得分:0)
JSON和查询字符串是两回事。通过GET(或POST)发送数据时,您不需要使用JSON。
$.ajax({
url: "http://localhost:11523/Service1.svc/GetBidObject",
dataType: "jsonp",
type: "GET",
data: param,
success: function (msg) {
alert("success");
if (msg != null) {
return msg.URL;
}
},
error: function (msg2) {
alert(msg2);
}
});
jQuery将正确地搜索param
并生成URL:
http://localhost:11523/Service1.svc/GetBidObject?id=123&callback=jquery1234
然后,您只需从后端的查询字符串中读取id
值即可。