6

我正在构建一个 Google Chrome 浏览器扩展,它使用$.ajax请求将数据从网页发送到我的服务器(当前使用 localhost 托管)。content_script.js在扩展程序有权访问的网页上下文中执行的文件(更多关于内容脚本)运行以下代码:

//note: encode64String is assigned earlier in the script...

$.ajax({
type: "POST",
url: "http://localhost:8888/quartzsite/uploadendpoint.php",
type: "jsonp",
data: {img: encode64String},
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
success: function(data){
    console.log("The ajax request succeeded!");
    console.log("The result is: ");
    console.log(data);
},
error: function(){
    console.log("The request failed");
}
});

问题是Ajax请求成功但data它返回的参数是空的......

代码运行后控制台如下所示:在此处输入图像描述

目前该uploadedendpoint.php文件的内容是:

<?php
  header("Access-Control-Allow-Origin: *");
  echo 'This comes from php file'; die();
?>

<!DOCTYPE html>
<html>
<head>
    <title>Title of the document</title>
</head>

<body>
The content of the document......
</body>

</html>

这意味着至少应该在data变量中返回一些东西。

我进一步确认请求是成功的,因为当我将请求发送到损坏的 url(即 uploadddddendpoint.php)时,会执行$.ajax'serror参数中的代码。

我读过类似的问题,如jQuery $.ajax response empty,但仅在 Chrome 中但无济于事......

更新

我已经type: "jsonp"完全删除了无效的第二个参数并添加了dataType: "text/html". 我现在ajax每次运行代码时都会收到失败的请求。

更新:奇怪地更改dataType : "text/html"dataType : "html"导致ajax请求成功但再次使用空白data变量。 更新:当使用开发工具包监控网络 XHR 时,这些是发送/响应消息:

在此处输入图像描述 在此处输入图像描述

关于 不可能在 Chrome 扩展中跨站点 ajax api 调用的可能重复标志?我建议否则!我已经调查了这个问题,但问题似乎并不相同。

4

2 回答 2

2

为什么type您的 AJAX 请求中有两个字段?jsonpPOST

$.ajax({
    type: "POST",  // OK
    url: "http://localhost:8888/quartzsite/uploadendpoint.php",
    type: "jsonp", // ???
    // ...
});

更新:

我认为您应该使用 URL 的相对路径。尝试将您的请求更改为以下内容:

$.ajax({
    type: "POST",
    url: "/quartzsite/uploadendpoint.php",
    dataType: "text/html",
    data: {img: encode64String},
    success: function(data){
        console.log("The ajax request succeeded!");
        console.log("The result is: ");
        console.dir(data);
    },
    error: function(){
        console.log("The request failed");
    }
});

您可以看到我将 URL 替换为/quartzsite/uploadendpoint.php. 这可能会解决问题...绝对 URL 可能表示跨域请求,这不是您所追求的。

另外,作为旁注,没有必要设置 contentType,因为您设置的内容已经是默认值。如果您发送的是 JSON 或 XML,那么您需要设置 contentType。

于 2013-08-14T22:29:16.983 回答
0

将响应数据发送到 ajax 时使用“echo”而不是“return”。

于 2019-09-16T09:05:41.987 回答