Java 未调用jsonp回调函数
我看了很多其他关于这个话题的帖子,但我无法指出我的问题。也许其他人可以 我创建了一个web服务()来调用另一个api并获取数据。我正在使用以下jQuery调用我的web服务(utimktoservice)Java 未调用jsonp回调函数,java,jquery,ajax,web-services,jsonp,Java,Jquery,Ajax,Web Services,Jsonp,我看了很多其他关于这个话题的帖子,但我无法指出我的问题。也许其他人可以 我创建了一个web服务()来调用另一个api并获取数据。我正在使用以下jQuery调用我的web服务(utimktoservice) var mktoApiUrl = 'http://utimktoservice.uti.edu/MarketoService.svc/getMktoDetails/email/' + token; $.ajax({ url: mktoApiUrl, dataType: "jso
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 + ")");
}
});
我的webrervice.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);
}
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();
}
我的webservice.svc文件看起来像
[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);
}
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();
}
如果我在浏览器中直接调用我的Web服务,我会收到以下响应:
“GetMktoInfoResult({\'requestId\':\'b003}1594c9a833e\',\'result\':[{\'id\':20628195,\'updatedAt\':\'2016-12-09T18:19:37Z\','lastName\':'Test\','email\'test@uti.edu\“,”createdAt\“:\”2016-05-11T03:41:23Z\“,”firstName\“:\”User\“}],”success\“:true})”
我的理解是,因为我的Web服务需要以jsonp格式返回结果,所以结果只需要包装在一个函数(“GetMktoInfoResult”)中,因为我的服务返回的结果是在GetMktoInfoResult()中封装的,所以我需要使用jsonpCallback参数在ajax调用中指定
我收到的日志结果是:
xhr(未定义)状态(解析错误)
错误(错误:未调用GetMktoInfo结果) 那么,解析错误是由什么引起的呢?jsonp结果中的格式错误(反斜杠?)?为什么GetMktoInfo结果不被称为error
感谢您的帮助,当您转到浏览器中的url时,反斜杠不应该出现。我认为问题在于您的
.cs
文件说响应是JSON。因此,它将返回的字符串转换为JSON格式,该格式将整个字符串用引号括起来,并转义所有内部引号。您需要对其进行更改,以便它只发送响应而不进行任何重新格式化。@Barmar,感谢您的输入。不确定如何将响应更改为无格式。WebMessageFormat只有两个选项—Json和Xml。如果我完全注释掉ResponseFormat,格式默认为xml……如果我删除了所有双引号,那么反斜杠也将从web服务的输出中删除。但是我仍然收到相同的“parserror”和[callback function]“was not called”错误。当你转到浏览器中的url时,反斜杠不应该出现。我想问题是你的.cs
文件说响应是JSON。因此,它将返回的字符串转换为JSON格式,该格式将整个字符串用引号括起来,并转义所有内部引号。您需要对其进行更改,以便它只发送响应而不进行任何重新格式化。@Barmar,感谢您的输入。不确定如何将响应更改为无格式。WebMessageFormat只有两个选项—Json和Xml。如果我完全注释掉ResponseFormat,格式默认为xml……如果我删除了所有双引号,那么反斜杠也将从web服务的输出中删除。但我仍然收到相同的“parserror”和[callback function]“未调用”错误。