Gewusst wie: übergeben Sie parameter im AJAX-URL?
Habe ich einen service entwickelt, die erfolgreich laufen. Folgende ist meine service-code:
namespace WcfService1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method="GET", ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped, UriTemplate="/display/{a}/{b}")]
string Display(string a, string b);
}
}
Mein Service:
namespace WcfService1
{
public class Service1 : IService1
{
public string Display(string a, string b)
{
int ab = Convert.ToInt32(a);
int bc = Convert.ToInt32(b);
int cb = ab + bc;
return cb.ToString();
}
}
}
Wie rufe ich diese mit Hilfe von AJAX-URL? Ich habe versucht den folgenden code, aber es funktioniert nicht.
<script type="text/javascript">
$(document).ready(function () {
$('#BtnRegister').click(function () {
debugger;
var No1 = document.getElementById('TxtFirstNumber').value;
var No2 = document.getElementById('TxtSecondNumber').value;
$.ajax({
cache: false,
type: "GET",
async: false,
url: "http://localhost:22727/Service1.svc/Display",
data: 'a=' +No1+'&b='+No2,
contentType: "application/json; charset=ytf-8",
dataType: "json",
processData: true,
success: function (result) {
alert("data");
},
error: function (xhr, textStatus, errorThrown) { alert(textStatus + ':' + errorThrown); }
});
});
});
</script>
Aktualisiert:
Habe ich meinen code wie folgt ein:
$(document).ready(function () {
$('#BtnRegister').click(function () {
debugger;
var No1 = document.getElementById('TxtFirstNumber').value;
var No2 = document.getElementById('TxtSecondNumber').value;
$.ajax({
cache: false,
type: "GET",
url: "http://localhost:22727/Service1.svc/Display",
data: { a: No1, b: No2 },
contentType: "application/json; charset=ytf-8",
//processData: true, //<-- this isn't needed because it defaults to true anyway
success: function (result) {
alert("data");
},
error: function (xhr, textStatus, errorThrown) { alert(textStatus + ':' + errorThrown); }
});
});
});
Aber wenn ich einen Klick auf den button:
- Verwenden
data: {'a' : No1, 'b' : No2},
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß der service definition, es erwartet JSON als request-format, aber Sie sind vorbei eine form codierte Schlüssel/Wert-paar. So ändern Sie den Daten-Teil:
Dieser wird ein Objekt übergeben, und weil Sie den content-Typ JSON, jQuery wird automatisch transformieren Sie das Objekt zu JSON für die Anfrage.
Auch Ihr service ist wieder ein string, nicht als JSON, so dass Sie brauchen, um zu entfernen
dataType: "json",
denn wenn man dieses in jQuery wird versuchen zu analysieren, die Antwort als JSON und löst den error-handler anstelle von Erfolg.Ich schlage vor, entfernen die
async: false
denn ajax ist am besten asynchron und es gibt keinen nutzen für eine synchrone Anfrage in diesem Fall.Voll verlangen nach oben genannten änderungen:
UPDATE nach der Frage herausgegeben:
Ihren Dienst, lebt auf einem anderen port an der Herkunft von JavaScript, daher die bitte nicht wegen der same-Origin-Policy.
Zu beheben, müssen Sie die Ausgabe der CORS-header vom Dienst:
Dies ermöglicht es jedem origin-den service rufen, Sie möchten verhindern, dass es zu bestimmten Herkunft.
Versuchen Sie dies:
und auf die business-Schicht, rufen Sie diese mit Hilfe der Variablen-Namen, dh. var1 und var2.
Versuchen, diese,
var params = {a: No1, b:No2}
Ich denke Daten sollte ein Objekt wie dieses, und entfernen Sie die async = false: