0

我需要使用以下 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 编码的,有什么想法吗?

4

2 回答 2

0

在您作为数据发送的简写 POST 请求$(this).serialize()中,所以我想您想在另一个请求中发送相同的表单数据。

要调试请求,请使用您的浏览器网络面板并查看请求是否实际触发以及响应是什么(F12 然后 Net > XHR)。

希望这可以帮助!

于 2012-07-18T12:17:17.210 回答
0

请查看文档: http ://api.jquery.com/jQuery.ajax/

查找mimeType属性。

mimeType(添加 1.5.1)字符串

用于覆盖 XHR mime 类型的 mime 类型。

因此,您需要添加以下内容:

$.ajax({
    data: data,
    type: "POST",
    mimeType: "text/html; charset=iso-8859-7"...
于 2012-07-18T12:01:56.863 回答