我正处于我的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() +
'¬e=' + 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。但为什么呢?
答案 0 :(得分:2)
我担心我不得不回答我自己的问题。
问题是如果/contact
与内部/contact/
处理程序匹配,CherryPy会将/contact
重定向到index()
。重定向是GET
。
更改
url: '/contact',
到
url: '/contact/',
解决了这个问题。我找到了答案here。
答案 1 :(得分:-1)
要向服务器发送帖子请求,请尝试此操作 打开( “POST”, “filename.extension”,TRUE);