嗨!
我正在使用WCF服务来处理来自单独域上的Web服务器的ajax调用(因此使用JSONP)。我的电话看起来像这样:
$.ajax({
dataType: 'jsonp',
type: 'GET',
url: 'http://localhost/s.svc/login?callback=?&l=en&e=foo&p=bar',
success: function (serverData) {
// [...]
},
error: function (jqXHR, textStatus, errorThrown) {
// [...]
}
});
我从服务器获得的响应如下所示:
?({"DataIsValid":true,"ErrorOccurred":false,"EmailAddressValidationMessage":"","PasswordValidationMessage":""});
jQuery在阅读时会抛出 parsererror 。
上面的响应看起来像有效的JSON,根据文档,我认为“?callback =?”适用于使用JSONP的$ .ajax调用。
提前感谢你指出我显然缺少的东西: - )
答案 0 :(得分:2)
我在这里看到几件事:
serverData
将是一个字符串。使用jQuery.parseJSON()
或JSON.parse()
var data = jQuery.parseJSON(serverData); //或者使用 JSON.parse(serverData);
应该这样做。
最后一件事。如果您开始在解析时遇到“意外令牌...”错误,则可能在JSON字符串中的某处隐藏了一个控制字符。我有这个问题,它是一个换行符(“\ n”)。通过在Chrome的开发工具控制台之类的字符串中解析字符串来确定它是哪个字符,然后替换它:
var data = jQuery.parseJSON(serverData.replace(/\n/g,""));
答案 1 :(得分:0)
我在MVC操作方法响应中丢失了(在回调方法中包装响应)。
response.Write(request.Params["callback"] +"(" +htmlContent +");");
jquery ajax调用应该如下所示。
jQuery.ajax({
url:"https://servername/virtualDirectory/ActionMethod,
crossDomain: true,
dataType: 'jsonp',
type: 'GET',
cache: false,
jsonp:"callback",
success: function (data) {
alert('success');
$fs("#fs_container").htm(data);
},
error: function (data, status, req) {
alert(req.responseText + " " + status);
}
});