1

レディース/メンズ:

ChromeとFireFoxで正常に機能する$.postを実行します。IE-それほど多くはありません...成功コールバック(addTicketAndRender())はヒットしません:

http://jsfiddle.net/AeQxJ/1/

POSTを使用してIEに対して「キャッシュバスティング」を実行する必要があることについて何か読んだことがありますが、これは比較的新しいので、それが適切な方法であるかどうか、適切な場合はその方法がわかりません。

ソース:

function addTicketAndRender(incomingTicket) {

    console.log("Add and Render");
    alert(incomingTicket);
}



$(document).ready(function() {

    console.log('ready');

    // variables to feed trusted ticket retrieval
    var trustedURL = "http://tableau.russellchristopher.org/trusted",
        userName = "foo",
        serverURL = "http://tableau.russellchristopher.org/";



    $.post(trustedURL, {
        username: userName,
        server: serverURL,
        client_ip: "",
        target_site: "",
        cache: "false"
    }, function(response) {
        addTicketAndRender(response);
    });

});​

少し助けてください?

Update1:​​これをajax投稿に切り替えました:違いはありません。ChromeとFirefoxではまだ良好ですが、IEではまだ機能していません。

    $.ajax( {
      url : trustedURL,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false


    } ).done( addTicketAndRender );

Update2:統合された追加のキャッシュバスティング技術。同じ動作-Chrome/FFは機能しますが、IEからは何もありません-Fiddlerを使用すると、http://jsfiddle.net/AeQxJ/3//から以下のコードを実行するとPOSTが出力されるのを確認できます。IEでは、それは決して起こりません。jsfiddleの外部でテストし、同じ結果を確認します。次のステップ:ブラウザの設定に触れていないボックスでテストして、自分の側で愚かなIEブラウザの設定を除外します。

function addTicketAndRender(incomingTicket){


    alert(incomingTicket);
}

$(document).ready(function() {
   // variables to feed trusted ticket retrieval

    var trustedURL = "http://tableau.russellchristopher.org/trusted",
        userName = "foo",
        serverURL = "http://tableau.russellchristopher.org/";

var number=Math.floor(Math.random()*1);
$.ajax( {
      url : trustedURL + "?" + number,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false
     } ).done( addTicketAndRender );

});​

更新4: IEのコピーを問題として除外しました。POSTにエラートラップコードを追加しました。IEで実行している場合にのみ、次のようにスローされます。

         error: function(xhr, textStatus, error){
              alert(xhr.statusText);
              alert(textStatus);
              alert(error);

//output:

//    xhr.StatusText: No Transport
//    testSttus: Error
//    error: No Transport

「IENoTransportjquery POST」で検索すると、次のようになります。

jQueryのWebサービス呼び出しで「トランスポートなし」エラーが返される

投稿は、追加jQuery.support.cors = true;すると問題が解決するはずだと示していますが、解決するとエラーが返されます。

//output:

//    xhr.StatusText: Error: Access is denied
//    testSttus: Error
//    error: Error: Access is denied
4

4 に答える 4

3

変化する

$.post( ...
    cache: "false"
    ...

に:

$.ajax(...
    cache: false,
    ...

注意:最初のキャッシュは無意味な文字列ですが、後者はブール値のfalseです。

于 2012-06-05T12:31:05.323 に答える
1

cache:falseが機能しない場合、昔ながらの方法では、乱数などのgetパラメーターをURLに追加していました。

var number=Math.floor(Math.random()*1)
$.ajax( {
      url : trustedURL + "?" + number,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false


    } ).done( addTicketAndRender );

これは、デバッグにも役立ちます(乱数からシーケンシャルに変更します)。それでも機能しない場合は、削除.doneして次のようなものを使用しますcomplete

$.ajax( {
      url : trustedURL,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false,
      complete : function() {
         addTicketAndRender
      }
  });

最後に、jsfiddleページを使用してこれを行う場合は、コードからconsole.log()を削除してください。これにより、IEが破損します(console.logを理解できません)。

于 2012-06-05T12:57:55.047 に答える
0

$.post$.ajax()リンクの短縮版にすぎません:http: //api.jquery.com/jQuery.post/

より多くの制御が必要な場合$.ajax()は、「ネイティブ」方式でより多くのオプションがあるため、使用することをお勧めします。リンク:http ://api.jquery.com/jQuery.ajax/

$.ajax({cache: false})IEは(驚いたことに)デフォルトとして使用されている唯一のブラウザーであるため、jQuery.ajax()に関する優れたコーディングのヒントは、常にデフォルトcache: trueとして設定されています。

于 2012-06-05T12:42:36.873 に答える
0

console.log('');IEはステートメントにつまずく傾向があります。Log()関数にラップしてみてください。

function Log(text) {
    try {
        console.log(text);
    }
    catch (e) {
    }
}

それで問題が解決した場合は、プロジェクト全体でconsole.log()を使用するためにこのアプローチを使用することをお勧めします。

于 2012-06-05T12:59:08.493 に答える