2014-01-30 4 views
2

와 플라스크-편안한 API에 요청을 할 수 없다, 나는 백본 응용 프로그램에 웹 클라이언트를 변환 할 노력하고있어. 그러나 API에 간단한 요청을 보낼 수는 없습니다. 우리의 웹 서비스는 python으로 쓰여졌습니다. 앱은 API에 OPTIONS 요청 만합니다.난 그냥 backbone.js를 배우기 시작 backbone.js

가 나는 백본 자체하지만 서버와의 문제가 아니에요 생각 (그것은 GET 요청을해야한다). 왜냐하면 내가 https://api.github.com으로 URL을 변경하고 /gists/1으로 끝점을 변경하기 때문에 매력처럼 작동합니다. 비슷한 문제에 대한 몇 가지 stackoverflow 질문을 읽었습니다. stackoverflow 사용자가 제안한대로 CORS 문제라고 생각하고 내 콘솔에서만 미리 채워진 요청을 봅니다.

그러나, 나는 이미 내 서버에 *Access-Control-Allow-Origin을 설정했습니다. 또한 localhost에서 서버를 실행하고 localhost에서 요청을하면 작동하지 않습니다. (포트가 다른,하지만 포트가 다른 경우가 크로스 사이트라고합니다 있는지 확실하지 않습니다)

나는 잘 내 서버에 JQuery와 아약스 요청을 할 수 있습니다. 단지 백본과 함께 작동하지 않습니다. 여기

는 지금까지

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    options.url = 'http://localhost:5000' + options.url; 
}); 

var Complaints = Backbone.Collection.extend({ 
    url: '/complaint/recent' 
}); 

var ComplaintList = Backbone.View.extend({ 
    el: ".content", 
    render: function() { 
     var that = this; 
     var complaints = new Complaints(); 
     complaints.fetch({ 
      success: function(res) { 
       console.log(res); 
      } 
     }); 
     // console.log("hede2"); 
     // return this.$el.html("hede2"); 
    } 
}); 

cList = new ComplaintList(); 

// routers 
var Router = Backbone.Router.extend({ 
    routes: { 
     "": "home" 
    } 
}); 

var router = new Router(); 
router.on("route:home", function() { 
    cList.render(); 
}); 

Backbone.history.start(); 

백본 응용 프로그램이며,이 플라스크-편안한에서 엔드 포인트입니다.

class ComplaintRecent(restful.Resource): 
    def get(self): 
     category = request.args.get('category', '') 
     sinceid = request.args.get('sinceid', '') 
     slug_city = request.args.get('slugcity', '') 
     return ccomp.get_recent_complaints(category, sinceid, slug_city) 

아마도 서버 응답은 문제가 있는지 식별 할 수 있습니다.

00:28 ~ $ curl -I -X OPTIONS http://api.enforceapp.com/complaint/recent 
HTTP/1.1 200 OK 
Server: nginx/1.2.1 
Date: Thu, 30 Jan 2014 22:31:51 GMT 
Content-Type: text/html; charset=utf-8 
Content-Length: 0 
Connection: keep-alive 
Allow: HEAD, GET, OPTIONS 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE 
Access-Control-Allow-Credentials: true 

백본을 학습하는 첫날에 길을 잃었습니다. 나는 같은 질문을 freenode에서했지만 대답을 얻을 수 없었습니다.

가능한 문제를 해결할 수있는 자료가 있다면 정말 기쁩니다.

+0

'Access-Control-Allow-Headers : X-Requested-With'를 추가해야 할 수도 있지만 100 % 확신 할 수는 없습니다. 인터넷은'Allow-Origin : *'을 사용하면 모든 것이 작동하도록 할 때'Origin' 헤더의 내용으로 응답 할 것을 제안합니다. –

+0

정의하려면 문제가있는 서버 측 또는 클라이언트 측에서'.fetch' 호출시 클라이언트로부터 서버로 보내지는 원시 요청 데이터를 확인해야합니다. 이 정보를 제공해 주시겠습니까? – zeliboba

답변

1

나는 backbone.js가/업데이트 저장된 객체를 포함 할 PUT 및 POST 요청의 응답을 기대하고 있다고 생각합니다. 이것이 장고 티스 티피 (django-tastypie)와 함께 작동하지 않는 이유입니다.

예제의 응답 헤더에 "content-length : 0"이 표시됩니다.

관련 문제