如何将jquery重写为javascript:JsonP + Callbacks

时间:2013-04-26 00:18:23

标签: javascript jquery jsonp

如何将此jquery函数重写为常规javascript?

$(document).ready(function() {
    $.ajax({
        url: 'http://192.168.1.103:8124/',
        dataType: "jsonp",
        jsonpCallback: "_testcb",
        cache: false,
        timeout: 5000,
        success: function(data) {
            $("#test").append(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert('error ' + textStatus + " " + errorThrown);
        }
    });
});

特别

  jsonpCallback: "_testcb",
         cache: false,

原始错误的问题: 如何使用常规javascript设置xmlhttprequest对象的属性以接收JsonP回调?

更新了正确的问题: 如何使用"纯Javascript"?

制作JsonP回调

2 个答案:

答案 0 :(得分:3)

通过浏览器的网络开发者工具发送请求并查看其外观:

enter image description here

因此,为了模仿jQuery的反缓存行为,您可以在发送AJAX请求时向URL附加时间戳参数:

jsonp(url + '&_=' + (new Date).getTime());

对于JSONP回调,您只需传递callback参数:

jsonp(url + '?callback=' + callback_name);

然后,浏览器基本上会调用eval(callback_name + '(' + response + ')');,因此请确保您的回调函数是全局的。

答案 1 :(得分:0)

更新

经过一番挖掘后,我发现了post的等价物:

function foo(data)
{
    // do stuff with JSON
}

var script = document.createElement('script');
script.src = '//example.com/path/to/jsonp?callback=foo'

document.getElementsByTagName('head')[0].appendChild(script);
// or document.head.appendChild(script) in modern browsers

像魅力一样!