ajax' GET' call返回jsonp没关系但是callback产生' undefined'数据

时间:2012-04-25 17:18:45

标签: jquery get jsonp

我正在使用来自html页面的an.ajax jquery调用来访问跨域web服务。虽然我可以使用firebug查看jsonp数据,但我无法将其加载到变量中甚至显示它(用于调试目的)。尝试使用jsonpCallback,success和complete函数检索数据总是会导致'undefined'/ null数据。

最终,我需要将数据保存到变量中。任何帮助将不胜感激!

$.ajax({
    data: {
        User: UserValue,
        GUID: GUIDValue
    },
    cache: false,
    dataType: "jsonp", // tried json
    type: "GET",
    crossDomain: true,
    jsonp: false,  // tried true
    jsonpCallback: function (saveData) {
        if (saveData == null) {
            alert("DATA IS UNDEFINED!");  // displays every time
        }
        alert("Success is " + saveData);  // 'Success is undefined'
    },
    url: "http://localhost/NotifMOD/NotifService.svc/GetAllMessages?callback=success?",
    async: false, // tried true
    error: function (XMLHttpRequest, textStatus, errorThrown) {
         console.log(textStatus, errorThrown);
    },
    complete: function (a, b) {
        alert(a); //[object Object]
        alert(b); // parseerror
    }
});

1 个答案:

答案 0 :(得分:3)

在JSONP中,您必须在代码中定义您的函数。

jsonpCallback必须是此函数的名称,而不是函数。

请参阅http://api.jquery.com/jQuery.ajax/

你这样做:

function receive(saveData) {
    if (saveData == null) {
            alert("DATA IS UNDEFINED!");  // displays every time
    }
    alert("Success is " + saveData);  // 'Success is undefined'
}

$.ajax({
    data: {
        User: UserValue,
        GUID: GUIDValue
    },
    cache: false,
    dataType: "jsonp", // tried json
    type: "GET",
    crossDomain: true,
    jsonp: false,  // tried true
    jsonpCallback: "receive",
    url: "http://localhost/NotifMOD/NotifService.svc/GetAllMessages?callback=receive?",
    async: false, // tried true
    error: function (XMLHttpRequest, textStatus, errorThrown) {
         console.log(textStatus, errorThrown);
    }
});