在OPTIONS阶段,JQuery ajax DELETE请求失败

时间:2014-01-12 01:10:35

标签: javascript jquery ajax

我正在尝试使用JQuery发送删除请求,但我一直收到500内部服务器错误。我用来发送请求的代码是:

$('#deleteReview').click(function(event, ui){
    var id = $('#editReviewId').val();

    $.ajax({
        type: 'DELETE',
        url: 'http://api.domain.com/v1/reviews/' + id,
        data: 'delete=1' + accessTokens,
        dataType: 'json',
        success: function(data) {
            ...
        },
        error: function(data) {
            ...
        }
    });
    return false;
});

虽然我在使用Postman(Chrome HTTP客户端扩展)时以及使用完全相同的AJAX函数发送GET或POST时得到200 OK响应。它只是PUT和DELETE不起作用。我已经在最新的Chrome和Firefox以及Android手机上进行了测试,因此不要认为浏览器存在问题。任何人都可以指导我解决代码可能出错的问题吗?

由于

修改

请求和响应标头:

Request URL:http://api.domain.com/v1/reviews/11
Request Method:OPTIONS
Status Code:500 Internal Server Error


Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:accept
Access-Control-Request-Method:DELETE
Connection:keep-alive
Host:api.domain.com
Origin:http://client.domain.dev
Referer:http://client.domain.dev/v4/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.68 Safari/537.36


**Response Headers**
Access-Control-Allow-Methods:*
Access-Control-Allow-Origin:*
Connection:close
Content-Type:text/html
Date:Sun, 12 Jan 2014 01:34:28 GMT
Server:Apache
Set-Cookie:laravel_session=4dd2062c4e6837c605c7b0b7e21d417c; expires=Sun, 12-Jan-2014 03:34:28 GMT; path=/; HttpOnly
Transfer-Encoding:chunked

控制器代码:

当我尝试调试时,控制器只是:

    class ReviewController extends \BaseController {

    public function destroy($id)
{
    dd('delete');
}
    }

dd()是Laravel函数的执行或死亡。

1 个答案:

答案 0 :(得分:3)

这绝对是服务器问题。

我不知道你在使用什么服务器,但这是我如何处理节点中的OPTIONS:

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, api_token, user_token');
    if ('OPTIONS' == req.method) {
        res.send(200);
    } else {
        next();
    }
};