2010-08-25 111 views
1

我正在开发SilverLight应用程序,其中在浏览器关闭事件中,我需要执行Web服务调用。我有一个接受一个参数的Web服务方法。当用户点击浏览器关闭事件时。我将会调用doRelease()函数。 releaseuser方法需要一个参数usertoken。JQuery:调用Web服务

我在调用我的jQuery函数CallService()时出错。

Line: 186 Error: Object expected

var varType; 
    var varUrl; 
    var varData; 
    var varContentType; 
    var varDataType; 
    var varProcessData; 
    //Generic function to call AXMX/WCF Service   
    function CallService() { 
     $.ajax({ 
      type: varType, //GET or POST or PUT or DELETE verb 
      url: varUrl, // Location of the service 
      data: varData, //Data sent to server 
      contentType: varContentType, // content type sent to server 
      dataType: varDataType, //Expected data format from server 
      processdata: varProcessData, //True or False 
      success: function (msg) {//On Successfull service call 
       alert("success"); 
       ServiceSucceeded(msg); 
      }, 
      error: ServiceFailed// When Service call fails 
     }); 
    } 

    function Temp(usertoken) { 
     varType = "POST"; 
     varUrl = "http://localhost/TempWS/MachineHistoryWS.asmx?op=ReleaseUser"; 
     varData = usertoken; 
     varContentType = "application/json; charset=utf-8"; 
     varDataType = "json"; 
     varProcessData = true; 

     alert("call service"); 

     CallService(); 

    } 
    function ServiceSucceeded(result) {//When service call is sucessful 

     alert("success"); 

     varType = null; varUrl = null; varData = null; varContentType = null; varDataType = null; varProcessData = null; 
    } 
    function ServiceFailed(result) { 
     alert('Service call failed: ' + result.status + '' + result.statusText); 
     varType = null; varUrl = null; varData = null; varContentType = null; varDataType = null; varProcessData = null; 
    } 



    function doRelease() { 

     var usertoken = readCookie("usertoken"); 


     Temp("usertoken"); 
    } 
+1

由于在你的例子中少于50行,你可以给我们所有的提示什么代码是在你的实际页面186行吗? :) – 2010-08-25 11:11:22

+0

它在进入函数CallService()时发生。你可以说发送我的参数?这是对的吗? – xscape 2010-08-25 11:25:55

+0

这与Silverlight有什么关系? – Pointy 2010-08-25 12:38:25

回答

1

我解决了我的问题,但没有使用jQuery。这是我的解决方案。

function sendDataAsXML_SOAP() { 
     var req_params = "", url = "", number = 0, type = ""; 
     /* Configure Parameters */ 
     url = "http://localhost/TempWS/MachineHistoryWS.asmx"; 
     user = "129272802615082804"; 

     req_params = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"; 
     req_params = req_params + "<soap:Body><ReleaseUser>"; 
     req_params = req_params + "<credentials>" + user + "</credentials></ReleaseUser></soap:Body></soap:Envelope>"; 
     alert(req_params); 
     /* Send XML/SOAP Request To Web Service Using Browser's Javascript DOM */ 
     try { 
      ajax_request = new XMLHttpRequest(); 
     } 
     catch (trymicrosoft) { 
      try { 
       ajax_request = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (othermicrosoft) { 
       try { 
        ajax_request = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (failed) { 
        ajax_request = false; 
       } 
      } 
     } 
     ajax_request.open("POST", url, true); 
     ajax_request.setRequestHeader("Content-Type", "text/xml;charset=utf-8"); 
     ajax_request.onreadystatechange = receiveXML_SOAPData; 
     ajax_request.send(req_params); 
    } 

    function receiveXML_SOAPData() { 
     if (ajax_request.readyState == 4) { 
      if (ajax_request.status == 200) { 
       alert(ajax_request.responseText); 

      } 
     } 
    } 
0

这看起来有点奇怪: -

function doRelease() { 

    var usertoken = readCookie("usertoken"); 


    Temp("usertoken"); 
} 

首先,我们假设readCookie是做正确的事?

其次应该是最后一行是: -

Temp(usertoken); 

三,凡在这一切的 “Silverlight的” 角?

0

数据必须包装为一个对象。在CallService功能,更改:

data: varData, 

到:

data: "{input:'" + varData + "'}", 

“INPUT” 改变实际参数名称在Web服务方法。