JSONP работает только с именованной функцией обратного вызова - PullRequest
0 голосов
/ 03 февраля 2011

Я заставил JSONP работать с анонимной функцией, но не могу заставить его работать с именованной функцией. Этот код работает (появляется предупреждение с правильными данными):

$.getJSON('http://example.com/test.aspx?foo=bar&callback=?',
    function (data) { alert(data.baz) })

Однако этот код не работает (предупреждение не отображается):

function dat(data) {
     alert(data.baz)   
}

$.getJSON('http://example.com/test.aspx?foo=bar&callback=dat')

Можете ли вы объяснить, почему не работает последний код?

РЕДАКТИРОВАТЬ: Я взял несоответствующий пример

Ответы [ 3 ]

2 голосов
/ 03 февраля 2011

Я не уверен, что пропуск обратного вызова - это правильное использование (или, по крайней мере, я не могу найти документацию, которая определяет, что должно произойти, если обратный вызов не предоставляется). Если вы хотите использовать именованную функцию в качестве обратного вызова, вы можете сделать:

function dat(data) {
    alert(data.baz)   
}

$.getJSON('http://example.com/test.aspx?foo=bar&callback=?', dat);
0 голосов
/ 03 февраля 2011

Посмотрев немного на ajax-код jquery, я думаю, что вы хотите либо сделать, как советуют Дэйв Уорд и Хэмиш, то есть передать функцию.Или, я думаю, вы можете передать имя функции в виде строки, подобной этой, так как она прикреплена к окну и jquery просматривает тип обратного вызова для определения поведения .

function dat(data) {
    alert(data.baz)   
}

$.getJSON('http://example.com/test.aspx?foo=bar&callback=?', 'dat');

Или вы можете использовать getScript , который добавит URL в качестве тега скрипта, что хорошо для того, что вы пытаетесь сделать.

function dat(data) {
    alert(data.baz)   
}

$.getScript('http://example.com/test.aspx?foo=bar&callback=dat');
0 голосов
/ 03 февраля 2011

Вы должны быть в состоянии встретить jQuery на полпути с чем-то вроде этого:

$.getJSON('http://example.com/test.aspx?foo=bar&callback=?', dat);
...