无法正确访问从WCF返回的jsonp数据到jquery

时间:2012-03-25 12:54:30

标签: jquery ajax json wcf jsonp

我可以使用另一双眼睛 - 也许我错过了一些明显的东西。我写了一个WCF服务来从我的sql server数据库返回一些基本数据。它似乎运作得很好。现在我只是试图将这些数据转储到我的网页上:

<script type="text/javascript">
  $.ajax({ url: 'http://localhost:35798/restserviceimpl.svc/json/999?callback=?',
    dataType: "jsonp",
    success: function (data) {
        alert(data); 
        $.each(data, function (i, item) {
            $('#gallery').append('<p>' + i + '.'+ item + '</p>');
        });
    }
  });
</script>

使用fiddler,它看起来像正确的格式json数据被返回到我的网页(并且警报显示我看起来jsonlint.com上验证的json数据),但当我尝试迭代它时,我只是得到每个'每个'一个字符,而不是'记录'。我得到800多个迭代,每个迭代只包含一个JSON字符串的字符,而不是json数据的大约17个'记录',每个都有两个字段。

所以我从我的WCF返回一个字符串,看起来像'JSON',或者我上面的jquery脚本有错误吗?

2 个答案:

答案 0 :(得分:1)

  1. Content-Type标头的值是多少?它应该是“application / json”
  2. 服务返回的数据值是多少?它可能类似于“[a,b]”而不是[a,b] - 即整个字符串可能用引号或类似的东西。
  3. 通常脚本看起来不错。

答案 1 :(得分:0)

好吧,我花了差不多2天试用了一个错误,不确定我是否在WCF端或jQuery端有问题,但这就是我最终得到的并且有效:

<script type="text/javascript">
$(function () {
    $.ajax({
        url: 'http://localhost:35798/restserviceimpl.svc/json/999',
        type: 'GET',
        dataType: 'jsonp',
        success: function (data) {
            var obj = $.parseJSON(data);
            $.each(obj, function (i, item) { $('#gallery').append('<p>' + item.Id + '.' + item.Name + '</p>'); });
        }
    });
});

由于某种原因,我不完全理解,我必须添加$ .parseJSON(数据)行,以便将从我的WCF服务下来的'JSONP'字符串转换为可用的JSON顺序能够迭代它。这很奇怪,因为我从这个应用程序中的其他地方消耗JSONP,并且没有必要这样做,所以我的WCF可能发送稍微不正确的结果,我需要在我的jQuery中进行补偿,但直到我认为如果这是真的,我只会选择有效的方法。