2015-07-21 81 views
0

我正在使用JSONP,並且我的url(action)正在返回名爲processTemplates的函數。 有什麼辦法可以執行我自己的功能,而不是 processTemplates。執行您自己的JSONP函數

像 _processJSONCallBack

function _processOverideCallBack(actionName) { 
     $.ajax({ 
       type: 'GET', 
       url: actionName, 
       async: false, 
       contentType: "application/javascript", 
       jsonpCallback: '_processJSONCallBack', 
       dataType: "jsonp", 
       error: function(jqXHR, exception) { 
       if (jqXHR.status === 0) { 
        alert('Not connect.\n Verify Network.'); 
       } else if (jqXHR.status == 404) { 
        alert('Requested page not found. [404]'); 
       } else if (jqXHR.status == 500) { 
        alert('Internal Server Error [500].'); 
       } else if (exception === 'parsererror') { 
        alert('Requested JSON parse failed.'); 
       } else if (exception === 'timeout') { 
        alert('Time out error.'); 
       } else if (exception === 'abort') { 
        alert('Ajax request aborted.'); 
       } else { 
        alert('Uncaught Error.\n' + jqXHR.responseText); 
       } 
      } 
     }); 
}; 

但是,當我試圖儘自己拋出異常「請求JSON解析失敗。」

請幫我解決這個問題。

回答

0

jQuery docs

跨域請求和數據類型:「JSONP」請求不支持 同步操作

,因爲你有async: false你可能會得到一個錯誤。

+0

甚至當我試圖非同步=真它給了我同樣的錯誤 – user2985842

+0

然而,當我在我的Ajax調用成功嘗試:功能(響應){ \t \t _processJSONCallBack(響應); \t}。神奇的是,它的工作 – user2985842

0

您可以使用JSONP Ajax調用中的數據以比您想要做的更簡單的方式調用,因爲jQuery將爲您創建回調函數做所有工作。您可以通過使用success處理程序只是這樣做:

function _processOverideCallBack(actionName) { 
    $.ajax({ 
      type: 'GET', 
      url: actionName, 
      dataType: "jsonp", 
      success: function(data) { 
       // data will be your already parsed JSONP data here 
      }, 
      error: function(jqXHR, exception) { 
        if (jqXHR.status === 0) { 
        alert('Not connect.\n Verify Network.'); 
       } else if (jqXHR.status == 404) { 
        alert('Requested page not found. [404]'); 
       } else if (jqXHR.status == 500) { 
        alert('Internal Server Error [500].'); 
       } else if (exception === 'parsererror') { 
        alert('Requested JSON parse failed.'); 
       } else if (exception === 'timeout') { 
        alert('Time out error.'); 
       } else if (exception === 'abort') { 
        alert('Ajax request aborted.'); 
       } else { 
        alert('Uncaught Error.\n' + jqXHR.responseText); 
       } 
      } 
    }); 
}; 

而且,你不能使用JSONP async: false。由於JSONP請求的工作原因,這不被支持。所有JSONP請求都必須是異步的。

此外,請記住,JSONP是一種不同於普通Ajax請求的請求,並且您的服務器必須支持JSONP類型的請求。您無法創建正常Ajax URL的JSONP請求。服務器必須產生JSONP格式的響應。

+0

錯誤不適用於jsonp每個文檔 – charlietfl

+0

@charlietfl - 我看到你在文檔中提到的,除了OP說他們從他們的''請求JSON解析失敗'''錯誤'處理程序。我想知道是否僅僅因爲jsonp的不同工作方式而導致一些錯誤。 – jfriend00

+0

不確定...除非$ .error被觸發也許?這不是$ .parseJson的消息,所以不知道它來自何處 – charlietfl

0

jsonpCallback是參數名稱當請求被構建時的回調函數。通常,JSONP請求如下所示:

http://example.com/endpoint?基於您的代碼回調 = yourFunction中&富=酒吧

,jQuery是可能發生這樣的事情:

http://example.com/endpoint_processJSONCallBack = yourFunction中&富=酒吧

你使用的是不知道自己的回調函數的名稱,因爲它不被在正確的參數設置無論API。檢查文檔以查看回調參數名稱應該是什麼。如果未指定jsonpCallback,jQuery將默認爲「回調」。