2012-02-16 43 views
1

在运行在萤火虫上时发现此代码,它将在控制台中显示无效标签并且我的成功回调也不会触发。经过我的方式谷歌关于答案摆脱我发现,当使用jsonp我需要解析的结果,我也需要有一个回调。现在我正在撞墙,寻找可能的答案。你能帮我解决这个问题吗?谢谢。尝试从宁静的web服务中检索json时出现无效标签

$.ajax({ 
     url: 'http://localhost:8732/Service1/data/10', 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     processdata:true, 
     jsonpCallback: 'mycallback', 
     success : function(data) { 

      var json = $.parseJSON(data); 
      $('#items').html(json); 
      alert(json); 

     }, 
     error : function(req, status, ex) { 

      alert("Lol" + ex); 

     } 
     }); 
     } 

另外,alert("Lol"+ex)会提示LoljQuery16403233689395911671_1329386795307当时不叫”

+0

此外,Alert(“lol”+ ex)会提示“LoljQuery16403233689395911671_1329386795307未被调用” – jongbanaag 2012-02-16 10:05:32

回答

1

jsonpString

在jsonp请求中覆盖回调函数名称。将使用此值 代替'callback =?'中的'callback'部分 查询字符串在url中。所以{jsonp:'onJSONPLoad'}会导致 'onJSONPLoad =?'传递给服务器。从jQuery 1.5开始,将 jsonp选项设置为false会阻止jQuery将“?callback” 字符串添加到URL或尝试使用“=?”。进行转化。在 这种情况下,您还应该明确设置jsonpCallback设置。 例如,{JSONP:假,jsonpCallback: “callbackName”}

jsonpCallbackString,功能

用于JSONP请求指定的回调函数名。将使用此值 而不是由 jQuery自动生成的随机名称。最好让jQuery生成一个唯一的名称,因为它将使管理请求更容易,并提供回调和错误 处理。当您希望启用更好的浏览器缓存GET请求时,可能需要指定回调。在jQuery 1.5中,你还可以 使用函数此设置,在这种情况下 jsonpCallback的值设置为函数的返回值

代码示例:

<!DOCTYPE html> 
<html> 
<head> 
    <style>img{ height: 100px; float: left; }</style> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <div id="images"> 

</div> 
<script> 
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", 
    { 
    tags: "cat", 
    tagmode: "any", 
    format: "json" 
    }, 
    function(data) { 
    $.each(data.items, function(i,item){ 
     $("<img/>").attr("src", item.media.m).appendTo("#images"); 
     if (i == 3) return false; 
    }); 
    });</script> 

</body> 
</html> 

参考文献:http://api.jquery.com/jQuery.getJSON/

编辑:代码2

$.ajax({ 
    url: 'http://server:port/path/to/file', 
    type: 'GET', 
    dataType: 'jsonp', 
    cache: false, 
    jsonp: '$callback', 
    error: function (x, t, r) { alert(x.response.message); }, 
    success: function (data) { 
     $.each(data.d.results, function (i, val) { 
      $("#results").append("<div>" + val.name + "</div>"); 
     }); 
    } 
}); 
+0

上有效,只是为了澄清。我应该把我的代码jsonp:false,jsonpCallback:“成功”?因为我做到了,但没有成功,我仍然有一个无效的标签错误。 – jongbanaag 2012-02-17 01:36:46

0

http://localhost:8732/Service1/data/10的JSON有效坚持在:?http://jsonlint.com/您也可以尝试做捕获错误:

var request = $.ajax({ 
    ... 
}); 

request.error(function(error) { 
    console.log(error); 
}); 
+0

我添加了您的代码。这是萤火虫的结果。对象{readyState = 4,status = 200,statusText =“success”} – jongbanaag 2012-02-17 01:35:24

+0

并且是http:// localhost:8732/Service1/data/10? json在jsonlint.com – jongbanaag 2012-02-17 01:39:04

相关问题