我需要使用以下 2 个脚本的组合,但尽管到目前为止我已经完成了所有组合,但我无法让它 100% 工作。
我使用颜色框来显示产品详细信息页面,其中有一个包含各种字段的表单,用于将项目添加到购物车。提交表单后,我想显示一个警报,然后关闭颜色框,以便基础页面(在最前面打开颜色框)保持原样。
有了这个脚本
$("#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);
}
});
如果有 xhr.setRequestHeader('Accept', "text/html; charset=iso-8859-7") 的 jQuery 等效项,我会非常乐意使用它。另外,我将什么声明为数据:所以我没有收到“未定义数据”错误?(尽管有错误,日期提交很好)。
更新:在到目前为止回答的人的各种建议之后,这就是我的代码的样子:
$("#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 编码的,有什么想法吗?