2010-12-28 14 views
1

標準AJAXクエリ:ジャバスクリプト/ jQueryの変数の問題(多分問題をキャッシュ)jQueryを使って

var globalTitle = ""; 
var pages = ["a", "b", "c"]; 

for (var i = 0; i < pages.length; i++) { 
    createpage(pages[i]); 
} 

function createpage(title) { 
    globalTitle=title; 
    console.log (globalTitle); //All looks good here 

    $.ajax({ 
     url: "createpage.php?id=" + title, 
     context: document.body, 
     success: success 
    }); 
} 

成功()関数は、私はそれがグローバルに宣言しなければならなかった理由ですglobaltitleを使用しています。

console.log(globalTitle)のsuccess()関数では、常に私に "a"を与えます。それは変数が割り当てられているようですが、success()が呼び出されるたびにキャッシュされます。

FF4とChrome 8で発生しますか?

編集:私はこのような何かを(var xhr =xhr.cpTitleビットは、この作業の鍵となる)だろう

function success(text) { 
    console.log (globalTitle); // always "a" 

    var div1 = "<div id=\"" + globalTitle + "\">"; 
    var text = "<a href=\"javascript:createpage('" + globalTitle + "')\">Retry</a> " + +text; 
    var div2 = "</div>"; 

    if ($("#" + globalTitle).length) { 
     $("#" + globalTitle).html(text); 
    } else { 
     $("#ajax").append(div1+text+div2); 
    } 
} 
+2

あなたは( '成功を投稿することができます)' – zsalzbank

+0

はどのようにあなたがglobalTitleを更新するのですが、そのあなたの成功の方法で起こるはずのように見えます。その方法を投稿すると我々は助けることができるはずです – Baz1nga

+0

投稿した今すぐ – bcoughlan

答えて

1

:ここで成功()関数があります。

function createpage(title) { 

    console.log(title); 

    var xhr = $.ajax({ 
     method: "post", 
     url: "createpage.php", 
     data: { 
      id: title 
     }, 
     context: document.body, 
     success: success 
    }); 

    xhr.cpTitle = title; 

} 

function success(data, status, xhr) { 
    console.log(xhr.cpTitle); 
} 

それとも、これは(success()が内側であることに注意してください:​​は(任意の応答が受信されたすべての前の)ページがリクエストされるたびに上書きされるので、それは常に最後に要求されたものの価値を持つことになりますので、これは、ありますcreatepage()、クロージャを作成することによって、別の方法)でこの問題を回避:

function createpage(title) { 

    function success(data, status, xhr) { 
     console.log(title); 
    } 

    console.log(title); 

    $.ajax({ 
     method: "post", 
     url: "createpage.php", 
     data: { 
      id: title 
     }, 
     context: document.body, 
     success: success 
    }); 

} 
+0

最初の解決策を試して、完璧に働いた。どうもありがとうございます。私の元のコードの動作についてはまだ完全に困惑しています。 – bcoughlan

1

問題はのcreatePageが同期的に呼び出されていることですが、設定されますどのようなglobaltitle保証はありませんので、成功関数が非同期的に呼び出されます〜に鶏の成功は続く。スクリプト全体ではなく、globaltitleをcreatepageにグローバルにしてみてください。

function createpage(title) { 
    $.ajax({ 
     url: "createpage.php?id=" + title, 
     context: document.body, 
     success: function(data) { 
      console.log(title); 

      //you could call your success function here and pass it title 
      success(title); 
     } 
    }); 
} 
+0

これは私の最初の考えでしたが、 "async:false"でjqueryを使ってみましたので、一度に1つのリクエストを行います...同じ結果です。 createpage()でglobaltitleを宣言した場合、success()はそれを見つけることができません – bcoughlan