Java 未调用jsonp回调函数

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

我看了很多其他关于这个话题的帖子,但我无法指出我的问题。也许其他人可以

我创建了一个web服务()来调用另一个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 + ")");
    }
});
我的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]“未调用”错误。