Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在使用django活塞的跨域API请求中工作_Javascript_Ajax_Django_Cors_Django Piston - Fatal编程技术网

Javascript 仅在使用django活塞的跨域API请求中工作

Javascript 仅在使用django活塞的跨域API请求中工作,javascript,ajax,django,cors,django-piston,Javascript,Ajax,Django,Cors,Django Piston,我无法使用django活塞在API上执行POST/PUT/DELETE跨域请求,我已使用此脚本启用CORS(基于): 在前端,我使用的是激活JSONP的主干网。我没有任何错误,选项请求工作正常,然后什么也没有发生。我试图更改«访问控制允许方法»,但它没有改变任何东西。有什么想法吗 编辑: 以下是选项请求的请求头: OPTIONS /api/comments/ HTTP/1.1 Host: apitest.dev:8000 User-Agent: Mozilla/5.0 (X11; Linux i

我无法使用django活塞在API上执行POST/PUT/DELETE跨域请求,我已使用此脚本启用CORS(基于):

在前端,我使用的是激活JSONP的主干网。我没有任何错误,选项请求工作正常,然后什么也没有发生。我试图更改«访问控制允许方法»,但它没有改变任何东西。有什么想法吗

编辑: 以下是选项请求的请求头:

OPTIONS /api/comments/ HTTP/1.1
Host: apitest.dev:8000
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Origin: http://3l-oauth.dev:1338
Access-Control-Request-Method: POST
Access-Control-Request-Headers: authorization,content-type
Pragma: no-cache
Cache-Control: no-cache
和响应标题:

HTTP/1.0 200 OK
Date: Sat, 12 May 2012 09:22:56 GMT
Server: WSGIServer/0.1 Python/2.7.3
Access-Control-Allow-Methods: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: AUTHORIZATION
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN

JSONP是GET-only:

您不能跨域发出POST、PUT或DELETE请求。跨域JavaScript通过使用
标记向服务器发送动态JavaScript请求来实现。脚本标记仅用于获取请求

但是,在处理跨域JavaScript时,为适应此限制,建议使用一个方法查询参数,您可以在服务器端代码中使用该参数来确定如何处理特定请求

例如,如果请求是

POST /api/comments/
然后你可以这样做:

/api/comments?method=POST
在幕后,它仍然是一个GET请求,但只需对API稍加修改即可实现目标

确定请求类型时,不要检查HTTP方法:

if request_method == "OPTIONS":    
改为检查请求参数“method”:

JSONP请求必须返回JavaScript:

另一个需要注意的非常重要的一点是,JSONP请求必须在函数调用中返回包装(或填充)的JavaScript。由于请求是通过期望JavaScript的脚本标记在后台发出的,因此服务器必须返回浏览器能够理解的内容

如果这对你来说没有意义,或者你需要更多的信息,那么有一个问题

if request_method == "OPTIONS":    
 if request.GET["method"] == "OPTIONS":