Ι需要使用以下两个脚本的组合,但尽管到目前为止我已经完成了所有组合,但我无法100%完成它。
我使用颜色框来显示产品详细信息页面,其中有一个表单,其中包含用于将项目添加到购物车的各种字段。在提交表单后,我想显示一个警告,然后关闭颜色框,以便底层页面(在forst位置打开颜色框)保持不变。
使用此脚本
$("#productadd").submit(function(){ // WORKS FINE EXCEPT THE ENCODING
$.post(
$(this).attr('action'),
$(this).serialize(),
function(data){
alert('Product was added to your order');
$().colorbox.close();
});
一切正常,除了编码在我的情况下是iso-8859-7(希腊语)。 如果我使用这个脚本,那么编码是可以的,但是帖子是使用默认行为进行的,重定向到表单动作中定义的url。
$("#productadd").submit(function(){ //ENCODING OK, COLORBOX.CLOSE() AND ALERT FAIL
$.ajax({
data: data,
type: "POST",
url: $(this).attr('action'),
dataType: 'json',
beforeSend : function(xhr) {
xhr.setRequestHeader('Accept', "text/html; charset=iso-8859-7");
},
success: function(json) {
alert('Product added to cart!'),
$().colorbox.close(),
itemAddCallback(json);
},
error: function (xhr, textStatus, errorThrown) {
$("#error").html(xhr.responseText);
}
});
如果有一个jQuery等效于xhr.setRequestHeader('Accept',“text / html; charset = iso-8859-7”),我会非常乐意使用它。另外,我将什么声明为数据:所以我没有得到'数据未定义'错误? (尽管有错误,日期提交正常)。
更新:根据目前为止回复的人提出的各种建议,这就是我的代码:
$("#productadd").submit(function(){
$.ajax({
data: $(this).serialize(),
type: "POST",
url: $(this).attr('action'),
dataType: 'text',
mimeType: "text/html; iso-8859-7",
success: function() {
alert('Item added to your order'),
$().colorbox.close();
},
error: function (xhr, textStatus, errorThrown) {
$("#error").html(xhr.responseText);
}
});
我唯一的问题是虽然它提交并显示警报等,但提交的数据是用utf-8编码的,而不是iso-8859-7,任何想法?
答案 0 :(得分:0)
请查看文档: http://api.jquery.com/jQuery.ajax/
查找 mimeType 属性。
mimeType(added 1.5.1)String A mime type to override the XHR mime type.
因此您需要添加以下内容:
$.ajax({
data: data,
type: "POST",
mimeType: "text/html; charset=iso-8859-7"...
答案 1 :(得分:0)
在简写POST请求中,您发送$(this).serialize()
作为数据,因此我想您要在其他请求中发送相同的表单数据。
要调试请求,请使用浏览器网络面板,查看请求是否实际触发以及响应是什么(F12,然后是Net> XHR)。
希望这有帮助!