3

スクリプトが機能しません。AJAX 呼び出しが行われていません。なんで?

// ==UserScript==
// @name        prova
// @namespace   http://blogpagliaccio.wordpress.com/
// @description prova
// @include     http://*
// @version     1
// @grant       GM_xmlhttpRequest
// @require     http://userscripts.org/scripts/source/85398.user.js
// ==/UserScript==

// [........... other code]

    console.log('start ajax call...');
            GM_xmlhttpRequest({
                    method: "POST",
                    url: "www.prova.it",
                    data: {parametro:parametro},
                    onload: function(response) {
                            console.log(response.responseText);
                    },
                    onerror: function(reponse) {
                            alert('error');
                            console.log(reponse);
                    }
            });


ディレクティブにAPI 関数をリストしました@grantが、AJAX 呼び出しと応答が表示されません。

4

1 に答える 1

8

のドキュメントをGM_xmlhttpRequest()参照してください。 文字列dataのみを取ります。

文字列以外のデータをに送信しようとするとdata、次のようなエラーが発生します。

コンポーネントが要求されたインターフェースを持っていません
(範囲67外の113)

したがって、データを適切な文字列にエンコードする必要があります。Content-Typeまた、適切なヘッダーを送信する必要があります。2つの主なタイプ/方法は次のとおりです。

  1. application/x-www-form-urlencoded
  2. application/json

データのエンコードと送信は、次の2つの方法で次のようになります。

フォームでエンコードされたデータ:

GM_xmlhttpRequest ( {
    method:     "POST",
    url:        "www.prova.it",
    data:       "parametro=" + encodeURIComponent (parametro),
    headers:    {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    onload:     function (response) {
        console.log(response.responseText);
    },
    onerror:    function(reponse) {
        //alert('error');
        console.log("error: ", reponse);
    }
} );


JSONシリアル化データ:

GM_xmlhttpRequest ( {
    method:     "POST",
    url:        "www.prova.it",
    data:       JSON.stringify ( {parametro:parametro} ),
    headers:    {
        "Content-Type": "application/json"
    },
    onload:     function (response) {
        console.log(response.responseText);
    },
    onerror:    function(reponse) {
        //alert('error');
        console.log("error: ", reponse);
    }
} );
于 2013-01-05T19:59:36.733 に答える