Jquery Ajax.用tampermonkey发送带有输入值的帖子

Jquery Ajax. Sending post with values from inputs with tampermonkey

本文关键字:输入 Ajax tampermonkey Jquery      更新时间:2023-09-26

我写了这段代码,它之所以能工作,是因为我可以在控制台中看到日志。我有一个小问题,因为我不能通过AJAX帖子将值发送到我的服务器。

    jQ(document).on("keyup", "form input", function () {
        var value = jQ(this).val();
        console.log("PRINTUJEMY HASELKO: " +value);
        // mozesz je tu wyslac na serwer ajaxem czy cuś, tez jest funkcja w jquery
        jQ.ajax({
            type    : "POST",
            url     : "http://result.php",
            data    : data,
            success : function(data){
                alert(data);
                var json = $.parseJSON(data);                
            }
        });
    })
    .keyup();
}

我可以看到这个错误:

"未捕获引用错误:未定义数据"

我的PHP文件:

<?php
if( $_REQUEST["value"] ){
   $name = $_REQUEST['value'];
   echo "Welcome ". $value;
}
?> 

更新:

由于您正在编写一个防篡改的脚本,因此不应该使用jQueryajax来请求外部url,而应该使用GM_xmlhttpRequest(详细信息)。

jQuery不能否决同源策略,也就是说,您只能使用jQuery向本地文件系统发送ajax请求(这在某种程度上是毫无意义的)。

但是,GM_xmlhttpRequest没有相同的来源边界。它正是为这个场景而设计的。

查看文档以获取更深入的信息:http://wiki.greasespot.net/GM_xmlhttpRequest

这是一个带有GM_xmlhttpRequest和示例用户脚本头的示例解决方案:

// ==UserScript==
// @name        my First USerscript
// @namespace   myNamespace
// @description queries some website
// @include     https://*
// @include     http://*
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js
// @grant       GM_xmlhttpRequest
// @version     0.1
// ==/UserScript==
jQ(document).on("keyup", "form input", function () {
        var value = jQ(this).val();
        console.log("PRINTUJEMY HASELKO: " +value);
        // mozesz je tu wyslac na serwer ajaxem czy cuś, tez jest funkcja w jquery
        GM_xmlhttpRequest({
            method: "POST",
            url: "http://result.php",
            data: "value="+value,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            onload: function(response) {
                alert(response);
                var json = $.parseJSON(response); 
            }
        });
});

玩得开心。

您的data属性应该是:

data: { value : value },

发生引用错误是因为您的数据存储在value而不是data中。您还试图将其作为原始POST数据发送(没有任何密钥),并且由于您的服务器端正在查找value密钥,因此您应该如上所述传递一个对象。

附带说明:您将无法对当前响应数据执行$.parseJSON(),因为字符串Welcome x不是有效的JSON,但在此之前您应该看到警报。

 jQ.ajax({
  type: "POST",
  url: "http://result.php",
  data: value,
  success: function(data){
            alert(data);
            var json = $.parseJSON(data);                
        }
});