2010-05-17 67 views
0

我的应用服务器上有一个.Net web服务,它返回格式为JSONP的数据。我在该服务器上有一个HTML测试客户端,使用IE,Firefox,Chrome,&。如果我将相同的HTML复制到我的工作站或部署到我的网络服务器,它可以与Chrome & Chrome一起使用,但在IE中,我收到了两个javascript错误。在远程域上使用JSONP + jQuery与IE浏览器调用webservice时出错

消息:对象不支持此属性或方法
行:1
字符:1个
代码:0
URI:HTTP:// MYDOMAIN/Web服务/ LyrisProxy /服务/ Lyris/JSONP/Lyris。 ?ASMX/ADDUSER lyrisInstance = “1” 和电子邮件= “[email protected]” 与全名= “我的名字” &lyrisList = “LISTNAME” &格式= JSON和回调= jsonp1274109819864&_ = 1274109829665

消息:找不到成员。
线:59
字符:209
代码:0
URI:http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js

我有点不知所措,以解决这个问题。

这是我的javascript。它实际上不是导致错误的JSONP,而是调用jqModal ev.preventDefault();。我正试图通过这个来看看为什么它会在IE上引用外部引用。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#createUser").live("click", function(ev) { 
      var invalidEmailAddressMessage = "That isn't a valid email address."; 
      var userSuccessfullyAddedMessage = "Congrats! You've been added to the iStage mailing list."; 
      var userAlreadyExistsMessage = "Looks like you're already on our mailing list!"; 
      var genericErrorMessage = "Something fishy happened. I don’t know what to tell you."; 

      // check for a valid email address 
      var regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
      if(regEmail.test($("#email").val()) == false) { 
       // invalid email address. Show error and let user retry. 
       ev.preventDefault(); 
       $('#lyrisReturnStatus').jqmShow().oneTime(3500, "soon", function() { 
        $('#lyrisReturnStatus').jqmHide(); 
     }); 
     $("#output").html(invalidEmailAddressMessage); 
     $("#email").select(); 
     return; 
      } 

      // Call the proxy to add the user 
      var service = new WS("http://apps.ce.org/WebServices/LyrisProxy/Services/Lyris/JSONP/Lyris.asmx", WSDataType.jsonp); 
      service.call("AddUser", { lyrisInstance:$("#lyrisInstance").val(), email:$("#email").val(), fullName:$("#fullName").val(), lyrisList:$("#lyrisList").val() }, function(AddUser) { 
       var lyrisReturn = JSON.parse(AddUser); 
       var goBack; 
       var timeout; 

       // See if the JSON returned is an error message and handle. 
       if(typeof(lyrisReturn.ErrorMessage) !== 'undefined' && lyrisReturn.ErrorMessage != null) { 
        var pos=lyrisReturn.ErrorMessage.indexOf("member already exists"); 
        if (pos>=0) 
        { 
         // Member already exists. 
         $("#output").html(userAlreadyExistsMessage); 
         goBack = true; 
        } else { 
         // Generic error. 
         $("#output").html(genericErrorMessage); 
         goBack = false; 
        } 
        timeout = 3500; 
       } 
       // See if the JSON returned the expected MemberID 
       if(typeof(lyrisReturn.MemberID) !== 'undefined' && lyrisReturn.MemberID != null) { 
        $("#output").html(userSuccessfullyAddedMessage); 
        goBack = true; 
        timeout = 2000; 
       } 

       //Show the modal display with the appropriate messaging and redirect. 
       ev.preventDefault(); 
       $('#lyrisReturnStatus').jqmShow().oneTime(timeout, "soon", function() { 
        $('#lyrisReturnStatus').jqmHide(); 
        if(goBack) { 
      history.go(-1); 
     } 
    }); 

      }); 
     }); 
     $('#lyrisReturnStatus'). 
      jqm({ overlay: 50, modal: true, trigger: false }); 
    }); 
</script> 
+2

你能告诉我们任何你的JavaScript吗? – Nalum 2010-05-17 16:44:41

+0

我加了javascript。我应该从一开始就这样做。 – 2010-05-18 13:42:23

回答

0

使用debugger找到有错误的行。

+0

我不知道IE的调试器,所以我扔了一堆警报语句来追踪它,发现问题不在于JSONP调用,而是在调用jqModal。 – 2010-05-18 13:43:16

相关问题