jsonp没有调用callBack函数

时间:2016-12-29 22:10:35

标签: java jquery ajax web-services jsonp

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

我已经创建了一个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没有调用错误?

感谢您的帮助,

0 个答案:

没有答案