views:

68

answers:

3

I am developing a SilverLight application wherein on browser close event, i need to do a web service call. I have a web service method which accepts one parameter. When the user clicks on browser close event. I'll be calling the doRelease() function. the releaseuser method requires a parameter usertoken.

I got an error when I'm calling my jQuery function 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");
    }
A: 

This looks a little odd:-

function doRelease() { 

    var usertoken = readCookie("usertoken"); 


    Temp("usertoken"); 
} 

First we assume readCookie is doing the correct thing?

Secondly should that last line be:-

    Temp(usertoken);

Third, where is the "Silverlight" angle in all of this?

AnthonyWJones
A: 

The data must be wrapped as an object. In CallService function, change:

data: varData, 

to:

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

Change "input" to the actual parameter name in your web service method.

Silkster
+1  A: 

I solved my problem but not using jquery. Here's my solution.

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/\"&gt;";
        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);

            }
        }
    }
xscape