2012-07-18 56 views
0

Ι需要用以下2個腳本的組合,但儘管我迄今所做的所有組合,我無法得到它的工作100%。需要一些幫助合併2個jQuery的腳本和行爲

我用一個顏色框來顯示產品的詳細信息頁面,其中有一個有添加物品到購物車中各個領域的一種形式。提交表單後,我想顯示一個提醒,然後關閉該提示框,以便底層頁面(即在最前面打開colorbox)保持不變。

有了這個腳本

$("#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(希臘)的罰款。 如果我使用這個腳本,然後編碼是好的,但後正在用默認的行爲,重定向到表單的動作定義的網址發出。

 $("#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( '接受', 「text/html的;字符集= ISO-8859-7」)我會很樂意使用它了。另外,我該如何聲明數據:所以我沒有得到'數據未定義'的錯誤? (儘管錯誤,日期提交罰款)。

UPDATE:從那些誰迄今回答各種建議後,這是我的代碼如下所示:

 $("#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

它可能會更好後,然後永遠...無論如何,請檢查[這](http://stackoverflow.com/a/15205281/655756)的答案。 – n1ckolas 2013-03-12 20:02:44

回答

0

請查看文檔: http://api.jquery.com/jQuery.ajax/

查找mime類型財產。

 
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"... 
+0

謝謝你,好的提示。但是,我的主要問題仍然存在。 – bikey77 2012-07-18 12:16:47

0

在速記POST請求發送$(this).serialize()數據,所以我想你想在其他請求發送相同的表單數據。

要調試的要求,使用瀏覽器的網板,看看請求實際上火和迴應內容(F12則網> XHR)。

希望這會有所幫助!

+0

我沒有看到除帖子外的任何請求。我的代碼是否正確,我應該將呼叫置於不同的功能中嗎? – bikey77 2012-07-18 12:36:00

+0

您是否將數據參數設置爲$(this).serialize()? 響應的狀態碼是什麼? – 2012-07-18 13:19:09

+0

好吧,我得到它,現在,狀態碼200等我在開發工具正確地看到帖子的值,但在我的網頁出現爲UTF-8。 所以,爲了縮小這個範圍,我在ajax中使用了正確的mimetype和/或數據類型,但是我不能指定它。 – bikey77 2012-07-18 13:37:57