当前应用程序必须从另一个应用程序检索信息,并且不需要此其他应用程序处于事件状态即可响应 JSONP
请求,因此发起请求者将弹出有关它的警告消息。
function jsonRequest(requestURL, errorMsg){
var err = "";
var requestData= {param1: value1, param2: value2};
$.ajax({
type: 'GET',
async: true,
data: requestData,
jsonpCallback: 'jsonCb',
url: requestURL,
timeout: 20000,
dataType: 'jsonp', /* this trigger the syntax error window by IE*/
contentType: "application/json; charset=utf-8",
success: function(data) {
if(data.hasError != null){
error = data.error;
alert(error);
}else{
//.... logic to output valid values
} // closing } is not missing..duh
},//success
error:function(x, timeout, m) {
alert(errorMsg);
}
});
return err;
}
那么就存在三种可能的情况:
- JSONP 请求从其他应用程序接收有效数据
- JSONP 请求从其他应用程序接收到空数据
- JSONP 请求没有得到响应(其他应用程序未激活)
到目前为止一直很好,直到在 IE 上进行测试。问题是当涉及到 场景 3
时,IE 弹出其经典的 Syntax Error
,在单击“关闭”后,$.ajax 中的警告消息 error: {..}
显示
Message: Syntax error
Line: 1
Char: 1
Code: 0
URI:.......
IE 调试工具非常蹩脚,所以它不允许我了解任何细节。在我逐行检查 javascript/jsp 代码后,我找到了问题的原因:
在场景 3 中,一旦我在 javascript 代码中将 dataType: "jsonp"
更改为 dataType: "json"
,然后出现错误不再弹出,但当然整个 ajax 请求都会失败。当其他应用程序处于非事件状态时,我无法找出调试工具返回给 IE 的内容。
我想知道是否有任何有效的方法可以让 IE 容忍 JSONP
或任何方法来调试问题的原因。
最佳答案
IE9 在任何情况下都可以使用您的代码这一事实证明了为那个恐龙创建 javascript 引擎的微软程序员的绝对无能
/rant - 您的问题的解决方案如下:查找 //you forgot this closing brace
function activateManifestJson(aUrl, code, timeoutErr){
var error = "";
// RESTful request data
var urlData = {param1: value1, param2: value2};
$.ajax({
type: 'GET',
url: aUrl,
async: true,
data: urlData,
jsonpCallback: 'jsoncallback',
timeout: 20000,
dataType: 'jsonp', /* this trigger the syntax error window by IE*/
contentType: "application/json; charset=utf-8",
success: function(json) {
if(json.hasError != null && json.hasError == "true"){
error = json.error;
alert(error);
}else{
//.... logic to output valid values
// *******************************************
} // you forgot this closing brace
// ***********************************************
},//success
error:function(x, tm, m) {
alert(timeoutErr);
}
});
return error;
}
关于javascript - JSONP无响应IE弹出 'Syntax Error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687602/