2015-07-21 2 views
0

Я использую JSONP, и мой url (действие) возвращает мне функцию, называемую processTemplates. Есть ли способ, которым я могу выполнить свою собственную функцию вместо processTemplates.Выполнение собственной функции JSONP

Something Like _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 От:

запросов Междоменных и DATATYPE: "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); 
       } 
      } 
    }); 
}; 

Кроме того, вы не можете использовать async: false с JSONP. Это не поддерживается из-за того, как работают запросы JSONP. Все запросы JSONP должны быть асинхронными.

Кроме того, помните, что JSONP - это другой тип запроса, чем обычный запрос Ajax, и ваш сервер ДОЛЖЕН поддерживать запрос типа JSONP. Вы не можете выполнить JSONP-запрос обычного URL-адреса Ajax. Сервер должен создать отформатированный ответ JSONP.

+0

Ошибка не доступна для jsonp per docs – charlietfl

+0

@charlietfl - Я вижу, о чем вы говорите в документе, за исключением того, что OP говорит, что они получают '' Requested JSON parse failed.'' от их ' ошибка' обработчик.Интересно, вызвано ли это только некоторыми ошибками из-за того, как работает jsonp. – jfriend00

+0

не уверен ... если не запущен $ .error? Это не сообщение для $ .parseJson, так что не знаю, откуда оно взялось – charlietfl

0

jsonpCallback - это имя параметра функции обратного вызова при построении запроса. Обычно запрос JSONP выглядит так:

http://example.com/endpoint? обратного вызова = yourfunction & Foo = бар

на основе кода, JQuery, вероятно, генерируя что-то вроде этого:

http://example.com/endpoint? _processJSONCallBack = yourfunction & Foo = бар

Независимо от API вы используете не знаете имя функции обратного вызова, потому что он не установлен в нужном параметре. Проверьте документацию, чтобы узнать, каким должно быть имя параметра обратного вызова. jQuery по умолчанию «обратный вызов», если jsonpCallback не указан.