我用了这个功能

    jQuery.ajax({
        type: 'POST',
        url: urlSubmit,
        timeout: 5000,
        dataType: 'text',
        data: {
            date : dataDate,
            url : dataUrl,
            domaine : dataDomaine,
            email : dataEmail,
            destinataire : dataDestinataire,
            msg : dataMsg
        },
        "success": function (jqXHR, textStatus, errorThrown) {
            console.log("AJAX success :) - statut " + textStatus);
            $timeout(successMailZR_alerte, 3000);
        },
        "error": function (jqXHR, textStatus, errorThrown) {
            console.log("AJAX fail :/ - statut " + textStatus);
            $timeout(errorMailZR_alerte, 3000);
        }

    });


代码的作用是:将POST代码发送到发送电子邮件的php脚本。

但是,由于我在一个完整的angularjs应用中重写了代码,所以我这样做是这样的:

    $http({
        method: 'POST',
        url: urlSubmit,
        timeout: 5000,
        cache: false,
        data: {
            date : dataDate,
            url : dataUrl,
            domaine : dataDomaine,
            email : dataEmail,
            destinataire : dataDestinataire,
            msg : dataMsg
        },
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        responseType: 'text',
    }).
    success(function(data, status, headers, config) {
        console.log("AJAX success :) - statut " + status);
        $timeout(successMailZR_alerte, 3000);
    }).
    error(function(data, status, headers, config) {
        console.log("AJAX fail :/ - statut " + status);
        $timeout(errorMailZR_alerte, 3000);
    });


问题是:使用$ http,我获得了200的成功,但没有张贴任何内容,并且我的电子邮件中没有任何回报。有什么问题 ?

最佳答案

要理解这一点,需要了解由angularjquery设置的请求标头,这些标头之间存在差异,例如jQuery请求发布时标头可能看起来像这样:

POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded // default header set by jQuery

foo=bar&name=John


您可以在浏览器中发出的请求中以表单数据的形式查看此内容,如果使用chrome,则可以在chrome inspector的“网络”标签中看到此内容;如果单击请求,则可以看到由设置的form data和内容标头jQuery的。

另一方面,使用angular js $http服务时,发出请求后,您可以找到以下内容:

POST /some-path HTTP/1.1
Content-Type: application/json // default header set by angular


{ "foo" : "bar", "name" : "John" }


真正的区别是您有一个request payload而不是jQuery使用的form data。因此您需要在服务器端做一些额外的事情,如下所示。

用这个:

$data = json_decode(file_get_contents("php://input"));
echo $data->date;
// and all other params you have sent


这是由于其默认标题


  
  接受:application / json,text / plain,* / *
  内容类型:application / json
  


和jQuery不太可能有其他东西:


  
  内容类型:application / x-www-form-urlencoded;字符集= UTF-8

关于javascript - jQuery.ajax至$ http,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25563047/

10-12 12:17
查看更多