2011-10-03 9 views
5

私はtravelagency用のWebサイトを開発したプロジェクトに取り組んでいます。物事はますます良くなり、交通量も増えています。問題はゆっくりと生成されたpricetablesにあります。私と私のクライアントは、利用可能な資金のために、memcacheはそのトリックを行うべきだと考えました。私が始めたばかりだったので、新しいjQuery ajaxコードで古いajaxコードを書き直しました。この晩のいくつかの記事は、このトピックを少し覆っています。ajaxでデータを送信しているときにデータが失われる

今、私は特定の月のpricetableを示し、次のコードを持っている:

function ShowPriceTable(targetElement, accommodationID, month) 
{ 
    $.ajax({ 
     type: "POST", 
     url: basePath + "/ajax/GetPriceTable.php", 
     data: "accommodationID="+accommodationID+"&month="+month, 
     success: function(data){ 
      $("#"+targetElement).html(data); 

      $.ajax({ 
       type: "POST", 
       url: basePath + "/ajax/WriteCache.php", 
       data: "accommodationID="+accommodationID+"&month="+month+"&data="+data, 
      }); 
     } 
    });   
} 

GetPriceTable.phpは、多くのクエリを実行し、大容量のファイルであるとpricecalculationの多くは、そこで行われています。すべての結果が価格のHTML表になります。 dataに格納されたその出力は、divのinnerHTMLプロパティに注入されます。この場合はtargetElementです。調整可能である必要があるためです。

私は正しいと思いました。dataに正しい出力があるとき、私はちょうどWriteCache.phpへの別の呼び出しをデータで発します。その後、データはmemcacheサーバーに$cache->set("my_key", $_POST["data"]);で保存されます(ヘッダーは過去に使用され、ブラウザの新しい訪問を確実にするために設定されています)。

私は何をしようとしても、私はキャッシュ内に正確に4067文字しか入れません。私は考えることができるオプションを使い果たしました。これは合計出力のほんの一部です... 追加alertdata.lengthは、私が探している宿泊施設のための値札に私を示しました、長さは98.858です。

この奇妙な動作の原因は何ですか?データを少しずつ渡すことはできますか? Memcacheにはオプションchunk_sizeがあり、デフォルトでは8192に設定されています(documentationは教えてません)

ご協力いただきありがとうございます。

乾杯!

p.s. memcachedのタグはmemcacheのでなければなりませんが、私はそのオプションを選択することができません。..

更新 問題はmemcacheのとは無関係です。何らかの理由で、データが再度送信されている間にデータが変更されます。これは何らかの理由でキャッシュに設定されておらず、私の出力(自分宛のメール)には表示されないが、結果を出力(成功を使って:2番目の呼び出しで)別のDIVに出力する無効なHTMLになります'mangled'出力...

+0

同僚は先月前半同様の問題を抱えていましたが、彼は$ .ajax投稿を介して1MB以上のデータをサーバーに送信しようとしていましたが失敗し続けました。彼は100万バイト未満のチャンクでアップロードしなければならなかったし、クラッシュして送信しないだろう。多分あなたのエラーは同じような場所にありますか? –

+0

このようなソリューションの実装方法についてのご意見はありますか? – Ben

+0

'data:" accommodationID = "+ accommodationID +"&month = "+ month +"&data = "+ data.serialize()、 – alykhalid

答えて

1

私はそれを理解しましたが、夕方には私にとって...私の出力にはHTMLエンティティが含まれています。あなたはそれを推測しました。 HTMLエンティティは、アンパサンドで始まり、同時に、$_GET$_POSTまたは$_REQUESTで検索されたデータの区切り文字です。単純なescape(data)がそのトリックをしました。これに時間をかけてくれた皆さん、ありがとうございました!

0

php.iniでMEMCACHE_COMPRESSEDを設定するか、または値を圧縮するために関数set a la Memcache::set($key, $var, MEMCACHE_COMPRESSED);でフラグとして渡すことができます。

+0

お返事ありがとうございます。多くのことを試した後、何らかの理由で 'データ 'が変更されたと私は結論づけました。だから私が何を設定しようとしているにせよ、その結果は一種の壊れたものです。 – Ben

+0

それを聞いて申し訳ありません。がんばろう。 –