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);
            }
        });

私の唯一の問題は、アラートなどを送信して表示しますが、送信されたデータが iso-8859-7 ではなく utf-8 でエンコードされていることです。

4

2 に答える 2

0

省略形の POST リクエストでは$(this).serialize()データとして送信するので、他のリクエストでも同じフォーム データを送信する必要があると思います。

リクエストをデバッグするには、ブラウザのネット パネルを使用して、リクエストが実際に発生するかどうか、および応答が何であるかを調べます (F12 を押してから [ネット] > [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 に答える