执行您自己的JSONP功能

时间:2015-07-21 20:40:42

标签: javascript jquery

我正在使用JSONP,我的url(action)返回了一个名为processTemplates的函数。 有什么方法可以执行我自己的功能而不是 过程模板。

有点像 _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解析失败了。”

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

来自jQuery docs

  

跨域请求和dataType:“jsonp”请求不支持   同步操作

您可能收到错误,因为您有async: false

答案 1 :(得分:0)

您可以使用来自JSONP Ajax调用的数据以比您尝试更简单的方式调用,因为jQuery将为您创建回调函数的所有工作。您可以使用exten => s,n,Set(SONG_TO_PLAY=${SHELL(/usr/local/asterisk/very_complicated_script_to_get_next_song_to_play.sh arg1 arg2 arg3):0:-1}) exten => s,n,Playback(${SONG_TO_PLAY}) exten => s,n,System(/usr/local/asterisk/notify_fb.sh ${SONG_TO_PLAY}) 处理程序执行此操作:

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一起使用。由于JSONP请求的工作方式,这不受支持。所有JSONP请求都必须是异步的。

此外,请记住JSONP是一种与普通Ajax请求不同的请求类型,您的服务器必须支持JSONP类型请求。您无法对正常的Ajax URL发出JSONP请求。服务器必须生成JSONP格式的响应。

答案 2 :(得分:0)

jsonpCallback是构建请求时回调函数的参数名称。通常,JSONP请求如下所示:

http://example.com/endpoint回调 =&yourFunction中放大器;富=酒吧

根据你的代码,jQuery可能会生成这样的东西:

http://example.com/endpoint _processJSONCallBack =&yourFunction中放大器;富=酒吧

您使用的任何API都不知道回调函数的名称,因为它没有在正确的参数中设置。检查文档以查看回调参数名称应该是什么。如果未指定jsonpCallback,jQuery默认为'callback'。