views:

48

answers:

3

I am using this code from http://www.joe-stevens.com/2010/01/04/using-jquery-to-make-ajax-calls-to-an-asmx-web-service-using-asp-net/

function callWebService(address) {
 var result;
 $("#result").addClass("loading");
     $.ajax({
         type: "POST",
         url: address,
         data: "{}",contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: Success,
         error: Error
     });
}

function Success(data, status) {
 $("#result").removeClass("loading");
 $("#result").html(data.d);
 alert("Success");
}

function Error(request, status, error) {
 $("#result").removeClass("loading");
 $("#result").html(request.statusText);
 alert("Error");
}

I don't understand what is wrong with this code. It keeps returning "Error"

A: 

Your code looks fine at first glance.

I recommend you use FireBug to attempt to isolate the problem further, as it will allow you to see the actual HTTP requests, POSTed data, etc...

Justin Ethier
A: 

A few suggestions based on some code I have doing this. But as others have said, make sure to manually look at the data going out and coming back. Your link references asp.net webservice, is that what you are calling since you didn't mention it.

  • Make sure the "address" url is of the form /location/page.asmx/methodname
  • You might need to pass the data to the success method in the call

    success: function(msg) {
        //msg is a json object, .d is the data field returned by asp.net
        if (msg.d.length > 0)
            ProcessData(msg.d);
        else
            HandleError('No data was returned.');
    },
     error: function() {
        HandleError('There was a problem calling the webservice.');
    }
Mike Ohlsen
can't get markdown to work with that code
Mike Ohlsen
+1  A: 

Also make sure that the service URL that you're trying to access is in the same domain as your site. AJAX calls won't succeed if you cross domains, since browsers subject AJAX calls to the same domain policy. Can you also include the URL you're trying to access?

If you're trying to access a resource at a different domain, you may want to consider a JSONP request instead. See the jQuery AJAX documentation for a discussion of how to use JSONP.

I think if you combine knowing the URL you're trying to access along with Justin and mohlsen's suggestions, I think we can help.

David Hoerster