2009-08-26 23 views
1

我正在使用Greasemonkey腳本從RSS提要http://www.instapaper.com/folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90中提取數據並使用jQuery將其插入到頁面中。該地址返回有效的RSS,但是當Greasemonkey觸發一個Ajax調用時(見下文),它總是返回一個空請求並觸發錯誤回調。我在Ajax調用中缺少什麼?jQuery.ajax調用返回一個空的數據容器,但原始URL工作

$.ajax({ 
    url: "http://www.instapaper.com/folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90", 
    dataType: "xml", 
    data: "", 
    type: "GET", 
    success: function (data){ 
    var classString = ""; 

    $("item",data).each(function (i) { 
     classString = classString + "<li><a href='" + $("link",this).text() + "'>" + $("title",this).text() + "</a></li>"; 
    }); 

    var message = "<div id='classes'><h2>Class Links</h2><ul>" + classString + "</ul></div>"; 
    $("#sidelinks").prepend(message); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    $("#sidelinks").prepend("<div id='classes'><h2>Class Links</h2><p>There was an error accessing class link information.</p></div>"); 
    } 
}); 

我不太清楚,如果這是它,但我jQuery.ajax呼叫似乎比發行時,我只需將RSS URL粘貼到我的位置欄中不同類型的HTTP調用的。即使我指定請求是「GET」,jQuery似乎在發送「OPTIONS」請求。下面是我的Ajax請求發出的呼叫以及工作請求通過Live HTTP Headers捕獲的輸出,通過將URL輸入到位置欄中 -

此人使用空(?)響應觸發Ajax錯誤回調對象:

http://www.instapaper.com/folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90 

OPTIONS /folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90 HTTP/1.1 
Host: www.instapaper.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Proxy-Connection: keep-alive 
Origin: http://home.bju.edu 
Access-Control-Request-Method: GET 
Access-Control-Request-Headers: x-requested-with 

HTTP/1.x 200 OK 
Date: Thu, 27 Aug 2009 15:16:53 GMT 
Server: Apache 
P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL" 
Vary: Accept-Encoding 
Content-Type: text/xml; charset=utf-8 
Content-Length: 1210 
Age: 0 

這成功地在瀏覽器中顯示的數據(當我在地址欄中拖放URL會發生什麼):

http://www.instapaper.com/folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90 

GET /folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90 HTTP/1.1 
Host: www.instapaper.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Proxy-Connection: keep-alive 

HTTP/1.x 200 OK 
Date: Thu, 27 Aug 2009 15:18:04 GMT 
Server: Apache 
P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL" 
Vary: Accept-Encoding 
Content-Type: text/xml; charset=utf-8 
Content-Length: 1210 
Age: 0 

回答

1

我正在加載jQuery到一個unsafeWindow對象中,所以我在猜測我的問題與Greasemonkey發起OPTIONS請求有關,它不允許使用jQuery使用的XMLHttpRequest

我能夠通過從使用jQuery.ajax切換到使用常規Greasemonkey GM_xmlhttpRequest調用成功地發出GET。我仍然在響應回調中使用jQuery。以下是我正在用舊線路註釋掉的一個簡短例子。

//$.ajax({ 
GM_xmlhttpRequest({ 
    url: "http://www.instapaper.com/folder/48337/rss/11185/QBV0RZfH4KBO7GwgrR3D8b7sv90", 
    //dataType: "xml", 
    //data: "", 
    //type: "GET", 
    method: "GET", 
    //success: function (data){ 
    onload: function (responseObject){ 
      var data = responseObject.responseText; 

      // Same code as in my question, use some jQuery selectors here to parse the data... 
    }, 
    //Error: function (XMLHttpRequest, textStatus, errorThrown) { 
    onerror: function() { 
     // Same code as in my question... 
    } 
}); 

(我找到了答案的一部分,我的堆棧溢出問題的問題[加載遠程URL用的Greasemonkey和jQuery] [1]

0

我相信你必須通過一個空的數據在設置到服務器數據參數。使用JSON,你可以用data: "{}"來做到這一點,但我不確定具體是什麼。如果您不傳遞一組空白的數據,我認爲它不會成功完成。

+0

嗯,我試過,但沒有成功。那裏有其他想法嗎? – 2009-08-26 19:34:43

+0

你究竟做了什麼? 「{}」不適用於XML我假設...也許只是一個空字符串? – 2009-08-27 17:14:56

+0

我試過「{}」和空字符串「」(這是我在上面編輯的問題)。我不確定發生了什麼,除非它與HTTP GET和HTTP OPTIONS之間的區別有關。 – 2009-08-27 17:40:25

相關問題