2012-02-16 68 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

相關問題