我正在构建一个Google Chrome浏览器扩展程序,该扩展程序使用$.ajax
个请求将数据从网页发送到我的服务器(目前使用localhost托管)。在扩展程序有权访问的网页(more on content scripts)上下文中执行的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(即uploaddddddendpoint.php)时,$.ajax
的{{1}}参数中的代码被执行。
我读过像jQuery $.ajax response empty, but only in Chrome这样的类似问题,但无济于事......
更新:
我已完全删除了无效的第二个error
参数,并添加了type: "jsonp"
。我每次运行代码时都会收到一个失败的dataType: "text/html"
请求。
更新:奇怪地将ajax
更改为dataType : "text/html"
会导致dataType : "html"
请求成功,但会再次使用空ajax
个变量。
更新:使用dev工具包监控网络XHR时,这些是发送/响应消息:
关于可能重复的标志 Impossible to cross site ajax api calls in a chrome extension?我建议不这样做!我已经调查了这个问题,问题似乎并不相同。
答案 0 :(得分:2)
为什么您的AJAX请求中有两个type
字段? jsonp
和POST
。
$.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");
}
});
您可以看到我用/quartzsite/uploadendpoint.php
替换了网址。这可能会解决问题...绝对URL可能会发出跨域请求的信号,这不是您所追求的。
另外,作为旁注,不必设置contentType,因为您设置的内容已经是默认值。如果您要发送JSON或XML,那么您需要设置contentType。
答案 1 :(得分:0)
解决问题的一种方法: 在chrome中是一个空洞的答案。 在FF中显示答案中的php警告 警告:....在线...
删除警告后,chrome开始显示响应。
答案 2 :(得分:-1)
在将响应数据发送到ajax时,使用“ echo”代替“ return”。