需要一些帮助结合2个jQuery脚本和行为

时间:2012-07-18 11:27:36

标签: ajax jquery post character-encoding

Ι需要使用以下两个脚本的组合,但尽管到目前为止我已经完成了所有组合,但我无法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,任何想法?

2 个答案:

答案 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)。

希望这有帮助!