2017-01-23 105 views
-1

$ .ajax被包裝成新的'get'函數。

如果在js文件中只有一個'get'調用,那就好了。 但行中的2個呼叫失敗。

更精確, 第一次調用失敗,「未捕獲的ReferenceError:過程沒有定義」, 第二個是成功的,但在成功的功能它有第一「得到」調用數據。

正如我所猜測的那樣,'this'/ context有一些問題。你能解釋給我嗎?

(function() { 
     "use strict"; 

     function get(url, success, error) { 
      $.ajax({ 
       type: "GET", 
       dataType: 'jsonp', 
       jsonp: 'callback', 
       jsonpCallback: 'process', 
       url: url, 
       success: success, 
       error: error 
      }); 
     } 

     get('XXX', 
      function(data, textStatus, jqXHR) { 
       console.log("SUCCESS PING 1"); 
       console.log(data); 
      }, 
      function(jqXHR, textStatus, errorThrown) { 
       console.log("ERROR PIND 1"); 
      }); 

     get('YYY', 
      function(data, textStatus, jqXHR) { 
       console.log("SUCCESS PING 2"); 
       console.log(data); 
      }, 
      function(jqXHR, textStatus, errorThrown) { 
       console.log("ERROR PING 2"); 
      }); 
    })(); 

/* 
=========================================== 
===============console===================== 
=========================================== 
1. ERROR PIND WAR 
2. Uncaught ReferenceError: process is not defined 
    at db?callback=process&_=1485184752755:1 
3. SUCCESS PING DB 
4. Object {data for first call here} 
*/ 
+0

也許你應該通過在不同的JSONP回調。 –

回答

0

首先,這是更好不指定一個定製的回調名稱( 'jsonpCallback' 參數)

http://api.jquery.com/jQuery.ajax/

jsonpCallback Type: String or Function() Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.

的事情是,jQuery的創建在全局函數具有指定名稱的窗口對象,然後將其刪除。 我沒有設法得到jQuery庫裏面發生的事情的全貌,但是 這個問題肯定是由於它試圖調用剛被刪除的函數。

刪除jsonpCallback PARAM解決問題