2016-04-26 8 views
1

html要素(elem1)と、elem1をそれぞれ隠して表示する2つのJS関数(func1func2)があります。これらのJS関数は個別のajax呼び出しを行い、func2func1を内部的に呼び出しています。show()複数のajax呼び出しを上書きしました

問題func2に電話する必要があります。内部ではfunc1が呼び出されます。 func1を呼び出すと、elem1が隠れます。 func1を呼び出した後、私はshowelem1にします。しかし、このshowは機能しません。

JSFiddle:https://jsfiddle.net/46o93od2/21/

HTML:

<div id="elem"> 
Save ME 
</div> 
<br/> 

<button onclick="func1()" id="func1">Try Func1</button> 
<button onclick="func2()" id="func2">Try Func2</button> 

JS:

function func1() { 
    $.ajax({ 
     url: '/echo/json/', //use the correct processing url here 
     type: "POST", 
     data: {}, // send in your data 
     success: function (data) { 
      //var aData = JSON.parse(data); // there is no data to parse 
       $('#elem').hide();  
     }, 
     error: function (xhr, errmsg, err) { 
      alert('error'); 
     } 
    }); 
} 


function func2() { 
    $.ajax({ 
     url: '/echo/json/', //use the correct processing url here 
     type: "POST", 
     data: {}, // send in your data 
     success: function (data) { 
      //var aData = JSON.parse(data); // there is no data to parse 
       func1(); 
      $('#elem').show();  
     }, 
     error: function (xhr, errmsg, err) { 
      alert('error'); 
     } 
    }); 
} 
+0

質問は何ですか?あなたのエラーは、解析するためにJSON文字列が返されていないためです。これは動作しますhttps://jsfiddle.net/46o93od2/21/ – spaceman

+0

'func1()'はAJAXのために非同期です。応答が受信されるまで要素を隠すわけではありません。したがって、 'func2'は要素を最初に示します。 – Barmar

+0

フィドルでは、 'JSON.parse(data)'を呼び出さないでください。 jQueryは自動的に解析します。 – Barmar

答えて

2

func1は、それが応答を取得した後に何をすべきか、それを伝えるコールバック関数を取ることを確認します。 func2は、要素を示す関数を渡すことができます。

function func1(callback) { 
    $.ajax({ 
    url: '/echo/json/', //use the correct processing url here 
    type: "POST", 
    data: { 
     json: '' 
    }, // send in your data 
    success: function(data) { 
     if (callback) { 
     callback(); 
     } else { 
     $('#elem').hide(); 
     } 
    }, 
    error: function(xhr, errmsg, err) { 
     alert('error'); 
    } 
    }); 
} 


function func2() { 
    $.ajax({ 
    url: '/echo/json/', //use the correct processing url here 
    type: "POST", 
    data: { 
     json: '' 
    }, // send in your data 
    success: function(data) { 
     func1(function() { 
     $('#elem').show(); 
     }); 
    }, 
    error: function(xhr, errmsg, err) { 
     alert('error'); 
    } 
    }); 
} 

DEMO

関連する問題