2015-01-26 3 views
5

Ich habe eine einfache Webmethode geschrieben, die ich auf der Clientseite anrufe, um zu prüfen, ob in der Datenbank ein Wert für die Textänderung vorhanden ist. Es funktioniert gut lokal, aber wenn ich es in unsere Entwicklungsumgebung verschiebe, gibt es den gesamten HTML der Seite in der Antwort zurück. Das einzige, was ich bemerkt habe, ist, dass lokal der Response.Server IIS7.5 ist, aber auf unserem Dev-Server ist es IIS6.

Hier ist mein Code:

Server-Code

[ScriptMethod] 
[System.Web.Services.WebMethod] 
public static bool CheckInvoiceExists(string vendorNumber, string invoiceNumber) 
    { 
     try 
     { 
      return RequestEntry.CheckInvoiceExists(vendorNumber, invoiceNumber); 
     } 
     catch (Exception exp) 
     { 
      EventLogging.LogError("Error checking if invoice exists: " + exp.Message); 
      return false; 
     } 
    } 

-Client-Code

function CheckInvoiceExists() { 
//var vendNo = $('#VendNoInputDisplay').text(); 
var vendNo = $('#VendorNumber').val(); 
var invNo = $('#InvNoInput').val(); 
var error; 
$.ajax({ 
    type: "POST", 
    aSync: false, 
    url: "PaymentRequest.aspx/CheckInvoiceExists", 
    data: JSON.stringify({ 
     vendorNumber: vendNo, 
     invoiceNumber: invNo 
    }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     if (data.d) { 
      $('#ErrorList').text(GetErrorText("invoiceNumberExists")); 
      $('#InvNoInput').focus().select(); 
      $('#InvNoInput').addClass('error invExists'); 
     } 
     else 
     { 
      $('#InvNoInput').removeClass('error invExists'); 
      ClearErrors(); 
     } 
    }, 
    error: function (jqXHR, textStatus, errorThrown) 
    { 
     $('#ErrorList').text(errorThrown); 

    } 
}); 

}

ist die Antwort-Header von meinem lokalen Rechner:

HTTP/1.1 200 OK 
Cache-Control: private, max-age=0 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/7.5 
Access-Control-Allow-Origin: * 
Persistent-Auth: true 
X-Powered-By: ASP.NET 
Date: Mon, 26 Jan 2015 18:18:36 GMT 
Content-Length: 11 

Von Dev:

HTTP/1.1 200 OK 
Connection: Keep-Alive 
Content-Length: 25586 
Date: Mon, 26 Jan 2015 18:30:40 GMT 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
Cache-Control: private 

Wenn ich es debuggen, geht es an die Fehlerfunktion des $ Schnipsel Aufruf.

errorThrown : SyntaxError: Unexpected token < 
jzXHR.responseText : [HTML of the page] 
textStatus: "parserror" 

Wenn ich öffnen op das CheckInvoiceExist Paket sehe ich:

Response is the current page. 
The request payload is something like this  {"vendorNumber":"0007000005","invoiceNumber":"Test1-12"} 

@edit ich das Hinzufügen versucht, die folgende Zeile über meine Web-Methode, aber es machte keinen Unterschied

[System.ServiceModel.Web.WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, UriTemplate = "json")] 

@edit ich versuchte Pagemethods anstelle der Verwendung der $ .ajax Anrufe zu verwenden. Dann habe ich versucht, den folgenden Test:

function Test(response) 
{ 
    alert(response); 
} 

PageMethods.CheckInvoiceExists("0007000005","Test1-12",Test); 

In der Warnmeldung ich noch einmal bekam die HTML für die Seite ...

+0

Können Sie die 'RequestEntry.CheckInvoiceExists' Methode posten? – mattytommo

+0

'content-length: 11' vs.s. 'content-length: 25586' ... Ich vermute, dass die v6-Seite aus irgendeinem Grund nicht korrekt ausgeführt wird. –

+0

@mattytommo Der RequestEntery.CheckInvoiceExists ruft nur eine gespeicherte Prozedur aus der Datenbank auf und gibt dieses Ergebnis dann an die Webmethode zurück. –

Antwort

0

Ändern Sie Ihre Server-Methode JSON zurückzukehren:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static bool CheckInvoiceExists(string vendorNumber, string invoiceNumber) 
    { 
     try 
     { 
      return RequestEntry.CheckInvoiceExists(vendorNumber, invoiceNumber); 
     } 
     catch (Exception exp) 
     { 
      EventLogging.LogError("Error checking if invoice exists: " + exp.Message); 
      return false; 
     } 
    } 
+0

Wenn man 'WebMethod' mit' JSON' als 'dataType' mit' jQuery' aufruft, kommt es bereits als 'JSON' zurück. –

+0

Ich habe versucht, das ResponseFormat.Json bereits hinzuzufügen –

2

Well Nachdem ich einen ganzen Tag mit meinem Kopf gegen meinen Schreibtisch geschlagen hatte, fand ich heraus, was falsch war.

ich fehlte den folgenden Schlüssel in meinem <system.web> in meinem Web-Config

<httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
</httpModules> 

Ich denke, dass IIS7.5 kümmert sich nicht darum, ob diese Linie ist oder nicht, aber IIS6 muss diese Linie dort haben damit Web-Methoden funktionieren.

Vielen Dank für die Hilfe!

+0

Wie Sie, schlug ich meinen Kopf für viele Stunden gegen meinen Schreibtisch und Ihre Antwort rettete meinen Kopf! – krlzlx

+0

Wie du, schlug ich stundenlang gegen meinen Schreibtisch und deine Antwort rettete mir den Kopf! Vielen Dank. Glückliche Kodierung !! –