【发布时间】:2013-02-24 15:43:37
【问题描述】:
好的,所以我尝试使用 jsonp 进行跨域 ajax webservice 调用以返回类别列表以填充下拉列表并得到奇怪的结果。我遵循了尽可能多的示例,并且在我的域上得到了一个 jsonp 请求,但它在其他域上不起作用。
代码如下:
function parseJSON(item){
return JSON.parse(item, function (key, value) {
var type;
if (value && typeof value === 'object') {
type = value.type;
if (typeof type === 'string' && typeof window[type] === 'function') {
return new (window[type])(value);
}
}
return value;
});
};
function getCategories() {
var webserviceURL = 'http://www.theprintersinc.co.uk/TPIWS.asmx/getCategories';
var myData;
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: webserviceURL,
data: { galleryGuid: 1 },
dataType: "jsonp",
complete: function (msg) {
if (msg) {
var myObject = parseJSON(msg.responseText);
var myCatList = parseJSON(myObject.d);
if (myCatList) {
catList = myCatList;
setCatDDL();
};
};
//reset close button
},
error: function (xhr, ajaxOptions, thrownError) {
var err = "err";
}
});
};
您可以在 http://www.theprintersinc.co.uk/stackHelp.html 的域上看到此功能 但是,当我尝试从我的电脑或另一台服务器上的简单 html 文件运行此代码时,它不起作用。我刚刚从 jbug 收到语法错误。
提前非常感谢任何和所有帮助!
尼克
【问题讨论】:
-
响应不是 JSONP
-
在我的域上,它至少会触发并返回一个可解析的响应,一旦它位于不同的域上,它就会显示语法错误。
-
您有什么建议吗?如果您需要查看网络服务,请告诉我...
-
您的网络服务必须将 JSON 包装在函数调用中。函数的名称必须与传递给 Web 服务的
callback参数相同。结果应该看起来像jQuery1234567({"foo":"bar"});,然后响应是 JSONP
标签: jquery ajax web-services cross-domain jsonp