我看了很多关于这个话题的其他帖子,但我一直无法查明我的问题。也许其他人可以。
我已经创建了一个Web服务(http://utimktoservice.uti.edu/MarketoService.svc/getMktoDetails/email/test@uti.edu)来调用另一个api并获取数据。我使用下面的jQuery调用我的Web服务(utimktoservice)...
var mktoApiUrl = 'http://utimktoservice.uti.edu/MarketoService.svc/getMktoDetails/email/' + token;
$.ajax({
url: mktoApiUrl,
dataType: "jsonp",
jsonpCallback: 'GetMktoInfoResult',
success: function (result) {
console.log('sucess - ' + result);
},
error: function (xhr, status, error) {
console.log("xhr (" + xhr.responseText + ")");
console.log("status (" + status + ")");
console.log("error (" + error + ")");
}
});
我的websrervice .cs文件看起来像
[ServiceContract]
public interface IMarketoService
{
// FilterTypes: email, cookie
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/getMktoDetails/{filterType}/{filterVal}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json
//,BodyStyle = WebMessageBodyStyle.Wrapped
)]
String GetMktoInfo(string filterType, string filterVal);
}
我的webservice .svc文件看起来像
public String GetMktoInfo(string filterType, string filterVal)
{
String token = GetAccessToken();
String url = host + "/rest/v1/leads.json?access_token=" + token + "&filterType=" + filterType + "&filterValues=" + filterVal;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString());
request.ContentType = "application/json";
request.Accept = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream);
String data = sr.ReadToEnd();
StringBuilder sb = new StringBuilder();
sb.Append("GetMktoInfoResult(");
sb.Append(data);
sb.Append(")");
return sb.ToString();
}
如果我直接在浏览器中调用我的网络服务,我会收到以下回复:
" GetMktoInfoResult({\"的requestId \":\" B003#1594c9a833e \" \"结果\":[{ \" ID为\":20628195,\" updatedAt \":\" 2016-12-09T18:19:37Z \" \&#34 ; lastName的\":\"试验\" \"电子邮件\":\" test@uti.edu \" \& #34; createdAt \":\" 2016-05-11T03:41:23Z \" \"的firstName \":\"用户\& #34;}],\"成功\":真})"
我的理解是因为我的webservice需要以jsonp格式返回结果,结果只需要包装在一个函数中(" GetMktoInfoResult")并且因为我的服务返回了GetMktoInfoResult中包含的结果(),我需要使用jsonpCallback参数在我的ajax调用中指定。
我收到的日志结果是:
xhr(未定义)
status(parsererror)
错误(错误:未调用GetMktoInfoResult)
那么由于什么是解析错误? jsonp结果中的格式错误(反斜杠?)?为什么GetMktoInfoResult没有调用错误?
感谢您的帮助,