2012-09-05 86 views
0

我正嘗試使用YQL爲來自wordpress博客的數據執行跨域請求。這是我第一次嘗試代碼:

var g = {data:""} 

function getWP() { 

    var targeturl = "http://www.mysite.com"; 
    var url = "http://query.yahooapis.com/v1/public/yql?"+ 
     "q=select%20*%20from%20html%20where%20url%3D%22"+ 
     encodeURIComponent(targeturl)+ 
     "%22&format=xml'&callback=?"; 

    var successfunc = function(data) { 
     if(data.results[0]){ 
      g.data = data.results[o]; 
     } else { 
      var errormsg = '<p>Error: could not load the page.</p>'; 
      alert(errormsg); 
     } 
    } 

    $.ajax({ 
     url: url, 
     success: successfunc 
    }); 

} 

當我嘗試這樣做AJAX調用,data對象返回是一個空字符串。但是,當我這樣做:

$.getJSON(url, successfunc); 

返回正確的JSON對象。這兩個電話有什麼區別?更重要的是,爲什麼只有第二個工作?

回答

2

不同的是,你不指定數據類型或內容類型

添加

$.ajax({ 
    url: url, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: successfunc 
}); 

你的Ajax調用

+0

由於它是跨域的,數據類型應該是jsonp,如下面的fahad所述。另外,我會花時間完全寫出一個簡單的成功函數,以防一個總新手在後期發生錯誤。否則,很好的答案和+1。 – gibberish

2

$ .getJSON()使用的數據類型JSON$ .ajax()沒有。如果您要使用標準$ .ajax(),則必須明確指定數據類型。對於交叉郵件呼叫,請使用數據類型jsonp而不是json。但我認爲YQL也適用於json。

+0

+1用於審閱jsonp,但將來我會花時間創建一個簡短的代碼示例。 – gibberish