функция обратного вызова URL не работает - PullRequest
2 голосов
/ 06 декабря 2011

Как правильно использовать функцию обратного вызова, потому что она не работает. Я хочу получить значения JSON с сервера на клиентскую сторону.

Для начала я попробовал это, чтобы увидеть, работает ли он.

пример кода

index.html

<button onClick = "Json()">Click Here</button>

my.js

function Json() 
{ 
var url = "http://www.sample.com/test.js?callback=displayUser";
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);   

} 

function displayUser(json) 
{
    alert("working");

}

test.js

var obj = { "a": "hey", "b": "what?"}

но не возвращает никаких предупреждений, поэтому, я думаю, оно не переходит к моей функции displayUser.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Если вы хотите, чтобы displayUser() вызывали test.js, вам нужно иметь код в test.js, который будет вызывать его.Он не будет вызван только потому, что вы поместили его в URL.Вам нужно было бы проанализировать код из URL-адреса и затем вызвать его.

Или, в качестве альтернативы, вы можете подключить уведомление, когда скрипт завершит загрузку, и просто вызвать displayUser() самостоятельно из * 1007.* после полной загрузки test.js.

Чтобы определить, успешно ли загружен внешний файл сценария, и просто набрать displayUser(), см. эту ссылку .

Есливы хотите получить значение обратного вызова из самого файла сценария test.js и выполнить его изнутри test.js, это единственный известный мне способ сделать это:

window.displayUser = function() {
    // do whatever
}

var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
    var url = scripts[i].src;
    // extract filename and callback parameter from the URL
    var matches = url.match(/\/([^\/]+)\?.*callback=(.*?)(&|$)/);
    if (matches && matches[1] == "test.js") {
        // call the callback function
        window[matches[2]]();
    }
}
0 голосов
/ 06 декабря 2011

Сценарий, который возвращается "http://www.sample.com/test.js?callback=displayUser", на самом деле должен быть действительным javascript и содержать вызов displayUser.

test.js должен вызывать dispayUser ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...