无法通过Chrome扩展程序发送帖子数据

时间:2019-05-20 05:49:12

标签: javascript google-chrome-extension xmlhttprequest

我有一个存在的API端点,并且我知道它可以正常工作(我经常测试,成功地使用PostMan进行了测试)。问题是,当我通过chrome扩展程序向其发布时,我可以连接,但是没有数据值被发送。

这是我的镶边清单: {

"background": {
    "scripts": ["eventPage.js","jquery-3.3.1.min.js"],
    "persistent": false
},

"content_scripts": [
    {
        "matches": ["https://*.amazon.com/*"],
        "js": ["content.js", "jquery-3.3.1.min.js", "inject.js"],
        "css": ["content.css"]
    }
],

"permissions": [
    "tabs",
    "storage",
    "https://*.amazon.com/*",
    "https://*.cloudfunctions.net/*"
] }

以下是进行呼叫的事件页面:

// listen to all messages at runtime
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
    if (request.todo == 'sendLoad') {
        console.log("MADE IT! Request Data", request.data)
        // FYI the request.data output is correct; everything is there

        // AJAX
        $.ajax({
            url: "https://prefix.cloudfunctions.net/endpoint",
            type: "post",
            data: {productName: encodeURIComponent(jQuery.trim(request.data.productName)), productImg: encodeURIComponent(request.data.productImg), productUrl: encodeURIComponent(request.data.productUrl), price: request.data.price, byLineValue: request.data.byLineValue, byLineUrl: encodeURIComponent(request.data.byLineUrl), amazonPath: encodeURIComponent(request.data.amazonPath[2]), uid: request.data.uid, tid: "1"} ,
            success: function (response) {
                console.log("Send complete: ", response);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(textStatus, errorThrown);
            }  
        });

    };
});

(仅供参考,我也尝试过单独发送request.data,但未成功。) 我还尝试使用xmlhttp请求进行呼叫:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","https://prefix.cloudfunctions.net/endpoint",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(request.data);

我还尝试使用jQuery帖子:

$.post("https://prefix.cloudfunctions.net/endpoint",{{productName: encodeURIComponent(jQuery.trim(request.data.productName)), productImg: encodeURIComponent(request.data.productImg), productUrl: encodeURIComponent(request.data.productUrl), price: request.data.price, byLineValue: request.data.byLineValue, byLineUrl: encodeURIComponent(request.data.byLineUrl), amazonPath: encodeURIComponent(request.data.amazonPath[2]), uid: request.data.uid, tid: "1"})
.done(function (data) {
    console.log("Send complete: " + data);
})
.fail(function() {
    console.log("Error sending data")
})
.always(function() {
    console.log("jQuery Post complete")
})

对于每种情况,我的API都会返回一条消息,提示值不存在:

Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field productImg).
    at Object.validateUserInput (/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:273:15)
    at Object.validateDocumentData (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:622:26)
    at CollectionReference.add (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:1743:23)
    at exports.addToTrunk.functions.https.onRequest (/srv/lib/index.js:27:14)
    at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /worker/worker.js:783:7
    at /worker/worker.js:766:11
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)

正如我之前提到的,端点可以成功运行,但是找不到发送的数据值。

更新: 看起来像Firebase的“添加”功能无法正常工作。这是firebase函数中的代码:

  newTrunk.add({
    created_at: created_at,
    uid: "CG8B0mdqzMed3PPCiwsKkBtXmiA2", //request.body.uid, //TODO: pull in uid from localstorage
    tid: '1', //TODO: provide list of trunks for person to select from when adding via extension
    productImg: JSON.stringify(request.body.productImg),
        price: JSON.stringify(request.body.price),
    productUrl: JSON.stringify(request.body.productUrl),
    byLineValue: JSON.stringify(request.body.byLineValue),
    byLineUrl: JSON.stringify(request.body.byLineUrl),
    amazonPath: JSON.stringify(request.body.amazonPath),
    source: JSON.stringify(request.body.source),
    productName: JSON.stringify(request.body.productName)
    // Tried to stringify and see if it would help ... it didn't
    // productImg: request.body.productImg,
        // price: request.body.price,
    // productUrl: request.body.productUrl,
    // byLineValue: request.body.byLineValue,
    // byLineUrl: request.body.byLineUrl,
    // amazonPath: request.body.amazonPath,
    // source: request.body.source,
    // productName: request.body.productName
  })
  .then(function(docRef) {
        // console.log("TCL: docRef", docRef)
    console.log("New item in trunk added with ID: ", docRef.id)
    response.status(200).send("Successful")
  })
  .catch(function(error) {
    console.error("Error adding newTrunk: ", error)
    response.status(500).send(error)
  });

0 个答案:

没有答案