Ajax请求成功但结果为空

时间:2013-08-14 22:22:11

标签: javascript jquery html ajax google-chrome-extension

我正在构建一个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参数为空...

运行代码后,控制台如下所示:enter image description here

目前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时,这些是发送/响应消息:

enter image description here enter image description here

关于可能重复的标志 Impossible to cross site ajax api calls in a chrome extension?我建议不这样做!我已经调查了这个问题,问题似乎并不相同。

3 个答案:

答案 0 :(得分:2)

为什么您的AJAX请求中有两个type字段? 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");
    }
});

您可以看到我用/quartzsite/uploadendpoint.php替换了网址。这可能会解决问题...绝对URL可能会发出跨域请求的信号,这不是您所追求的。

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

答案 1 :(得分:0)

解决问题的一种方法: 在chrome中是一个空洞的答案。 在FF中显示答案中的php警告 警告:....在线...

删除警告后,chrome开始显示响应。

答案 2 :(得分:-1)

在将响应数据发送到ajax时,使用“ echo”代替“ return”。