2015-07-21 70 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将默认为“回调”。