使用JQuery ajax发送* GET以外的任何其他*

时间:2011-09-23 02:10:58

标签: jquery ajax cherrypy

我正处于我的ajax学习曲线的开头。我有一个简单的javascript函数,它使用jQuery.ajax()将数据发送到服务器并接收简单的文本响应。正如预期在服务器上正确调用该函数,并通过request.method返回并显示响应(包括服务器看到的alert()的值)。

但是,无论我在type:中指定了哪个$.ajax() call,服务器始终都会报告已收到GET

这是我的javascript(再次,我看到了alert(),并且始终报告GET):

<script type="text/javascript">
function SendContactEntry() {

var payload = 'date='  + $('input[name=contact_date]').val() +
              '&us='   + $('input[name=contact_us]').val() +
              '&then=' + $('input[name=contact_them]').val() +
              '&note=' + encodeURIComponent($('input[name=contact_us]').val());

$.ajaxSetup({ jsonp: null, jsonpCallback: null});

$.ajax({type: 'POST',
    url: '/contact',
    data: payload,
    cache: false,
    contentType: 'application/json',
    dataType: "text",
    success: function (response){
        alert(response);
    }
    }
);

}
</script>    

这是服务器上的CherryPy处理程序:

class Contact:
def index(self):
    return 'You sent a %s request' % cherrypy.request.method

由于answer to this question,我包含了对$ .ajaxSetup()的调用,但它似乎没有什么区别。

(jQuery和CherryPy都是最新版本,Python是2.7)

已编辑:更多信息。

查看我的CherryPy控制台,我看到服务器 正在接收POST。它返回状态301(移动),然后立即收到与GET相同的请求,并以状态200响应。

所以看起来好像CherryPy在内部将POST重定向到我的处理程序作为GET。但为什么呢?

2 个答案:

答案 0 :(得分:2)

我担心我不得不回答我自己的问题。

问题是如果/contact与内部/contact/处理程序匹配,CherryPy会将/contact重定向到index()。重定向是GET

更改

url: '/contact',

url: '/contact/',

解决了这个问题。我找到了答案here

答案 1 :(得分:-1)

要向服务器发送帖子请求,请尝试此操作 打开( “POST”, “filename.extension”,TRUE);