2013-02-12 32 views
1

根據its documentationGM_xmlhttpRequest應該能夠將data參數作爲其參數的一部分。爲什麼GM_xmlhttpRequest忽略其數據參數?

但是,我似乎無法得到它的工作。

我有呼應給它的參數,一個簡單的服務器:

require 'sinatra' 
require 'json' 
get '/' do 
    JSON.dump params 
end 
post '/' do 
    JSON.dump params 
end 

而只是試圖將一些數據發送到服務器的簡單的Greasemonkey腳本。 它試圖將數據傳遞作爲URL查詢參數和POSTDATA:

// ==UserScript== 
// @name  PostDataTest 
// @namespace Test 
// @description Simple test of GM_xmlhttpRequest's data parameter 
// @include  http://localhost:4567/ 
// @version  1 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js 
// @grant  metadata 
// @grant  GM_xmlhttpRequest 
// ==/UserScript== 

var url = '/?q0=0&q1=1'; 
var data = 'd0=0&d1=1' 

GM_xmlhttpRequest({ method: 'POST', url: url, data: data, onload: function(r){ 
    console.log('gm:' + r.responseText); 
}}); 
$.post(url, data, function(d,s,r){ 
    console.log('jq:' + r.responseText); 
}); 

當我使用jQuery POST POSTDATA,它工作正常,但我張貼使用GM_xmlhttpRequest任何POSTDATA被忽略:

jq:{"q0":"0","q1":"1","d0":"0","d1":"1"} 
gm:{"q0":"0","q1":"1"} 

這使我相信,GM_xmlhttpRequest實際上並沒有使用我給它的data參數。 (我不確定b/c我無法在Firebug中監控GM_xmlhttpRequest的網絡活動)。

這是怎麼回事?我搞砸了嗎? API是否轉移?我如何使用GM_xmlhttpRequest發佈數據而不將其打包到URL中?

回答

3

好吧,我用TamperData firefox add-on來監視我的GM_xmlhttpRequests(這是發送postdata),看看他們做了什麼不同。

區別在於四個標題。當jQuery的發送

Accept:    */* 
Content-Type:  application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer:   http://localhost:4567/ 

GM_xmlhttpRequest發送:

Accept:    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Content-Type:  text/plain; charset=UTF-8 

使用headers:參數我可以指定我GM_xmlhttpRequestContent-Type,它得到它的工作。

// ==UserScript== 
// @name  PostDataTest 
// @namespace Test 
// @description Simple test of GM_xmlhttpRequest's data parameter 
// @include  http://localhost:4567/ 
// @version  1 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js 
// @grant  metadata 
// @grant  GM_xmlhttpRequest 
// ==/UserScript== 

var url = '/?q0=0&q1=1'; 
var data = 'd0=0&d1=1' 

GM_xmlhttpRequest({ 
    method: 'POST', 
    url: url+'gm', 
    data: data+'gm', 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 
    onload: function(r){ 
    console.log('gm:' + r.responseText); 
}}); 
$.post(url+'jq', data+'jq', function(d,s,r){ 
    console.log('jq:' + r.responseText); 
}); 
+0

啊,它甚至[在文檔中](http://wiki.greasespot.net/GM_xmlhttpRequest#POST_request)。哎呦。 – rampion 2013-02-12 21:37:50

+1

[修改GM自動設置此標題已被考慮並已被解除](https://github.com/greasemonkey/greasemonkey/issues/1032)。 – rampion 2013-02-12 21:41:22