【问题标题】:Django tastypie XMLHttpRequest cannot loadDjango 美味派 XMLHttpRequest 无法加载
【发布时间】:2013-03-28 04:17:42
【问题描述】:

过去一个小时我一直在阅读有关 XMLHttpRequest 的信息,但我似乎可以完成这项工作.. 所以,我在另一个服务器/端口上有一个带有美味派的 django 服务器和一个 JavaScript 客户端,当我尝试做一个 jquery 帖子时,我得到一个

XMLHttpRequest cannot load http://127.0.0.1:8000/api/smart/rating/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

我在客户端收到 Xmlthhprequest 错误消息

Django 代码:

class RatingResource(ModelResource):
city = fields.ForeignKey(CityResource, 'city')
user = fields.ForeignKey(UserResource, 'user')
class Meta:
    queryset = Rating.objects.all()
    resource_name = 'rating'
    #authentication = BasicAuthentication()
    #authorization = DjangoAuthorization()

我的 jquery 调用从 localhost:80 发布到 localhost:8000:

$('#star').raty({
  path: "../assets/img/",
  score    : rating,
  click : function(score, evt) {
      window.rate_app = score;
      var url = "http://127.0.0.1:8000/api/smart/rating/";
      //var comment = $('#textarea').val();
      var comment = "teste do php";
      console.log(cityId);  
      $.post(url,{city : '/api/smart/city/'+cityId+'/' ,comment : comment,id:'4',resource_uri:'/api/smart/rating/4/',rating : score, user: '/api/smart/auth/user/2/'},function(data,status){
          if (data=="error")
              console.log("error");
          else
              console.log("success");
      });

  }
});

更新:

HTTP/1.0 401 未经授权

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"city": "/api/smart/city/35/", "comment": "teste do php", "id": "4", "resource_uri": "/api/smart/rating/4/", "rating": "3","user_id": "/api/smart/auth/user/2/"}' `http://localhost:8000/api/smart/rating/`
HTTP/1.0 401 UNAUTHORIZED
Date: Mon, 08 Apr 2013 10:52:44 GMT
Server: WSGIServer/0.1 Python/2.7.3
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Content-Type: text/html; charset=utf-8
Access-Control-Allow-Headers: Content-Type,*
Access-Control-Allow-Credentials: true

我做错了什么?

【问题讨论】:

  • 您实际发出请求的 url 是什么。您的浏览器似乎认为它是一个跨域请求
  • 它的 localhost:80 发布到 localhost:8000

标签: jquery django post xmlhttprequest tastypie


【解决方案1】:

您好,我认为您实际上是在提出跨域请求。

要发起跨域请求,浏览器会发送带有 Origin HTTP 标头的请求。此标头的值是提供该页面的站点。

为了允许请求,它会在响应中发送一个 Access-Control-Allow-Origin 标头。标头的值表示允许哪些源站。

Access-Control-Allow-Origin: localhost:80

基本上你需要在你的服务器端允许一个选项请求,它会发回 Access-Control-Allow-Origin 标头

请仔细阅读以获得更好的想法

Cross domain POST query using Cross-Origin Resource Sharing getting no data back

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 2013-03-25
  • 2012-10-30
  • 2014-01-23
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多