Błąd w OnClick jeżeli formularz nie jest pusty

0

Witam.

Mam prosty formularz:

	<form class="form-signin">       
		<h2 class="form-signin-heading">Please login</h2>
		<input type="text" class="form-control" name="username" placeholder="Email Address" id="user" required="" autofocus="" />
		<input type="password" class="form-control" name="password" placeholder="Password" id="pass" required=""/>       
		<button class="btn btn-lg btn-primary btn-block" onclick="ChecUserId()">Login</button>   				
	</form>

W oddzielnym pliku mam funkcję ChecUserId():

 function ChecUserId() {
		console.log("Właściwa funkcja ChecUserId");
		var url = "http://.................webserwer.pl/WebService1.asmx/CheckUserId";
		$.ajax({
		type: "POST",
		url: url,
		data: "{ login: 2, pass: 2}",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function (data) {	
		  alert(data.d)
		},
		error: function (xmlHttpRequest, textStatus, errorThrown) {
		  console.log(xmlHttpRequest.responseText);
		  console.log(textStatus);
		  console.log(errorThrown);
		  alert(textStatus);
		  }
		});
			console.log("Właściwa funkcja ChecUserId KONIEC");
		};		
```	

Jeżeli kliknę przycisk login gdy formularz jest pusty dostaje alert z oczekiwanym wynikiem,
jeżeli wpiszę cokolwiek dostaję alert z napisem error.


Dlaczego tak się dzieje?
0

Wtf, dlaczego bawisz się w ręczną serializację?

0

@Patryk27: jeśli chodzi o programowanie w js to trochę eksperymentalne programowanie w moim wypadku...
Szukałem sposobu na wywołanie metody z webservice asp z poziomu skryptu js i znalazłem właśnie to.

0

Co to jest Chec? czyżby chodziło o Check? :P nawet w console.logu masz to :) Na czym polega to sprawdzenie? jeśli na tym czy jest poprawne - to nazwałbym to raczej isValidUserId :) Zobacz co zwraca Ci kod z urla od ajaxa, możliwe ze jak wypełniasz dane z inputów (swoją drogą nazwy inputów różnią się od zmiennych w Twoim przykładzie) - to Ci nie zwraca wymaganych danych.

0

Funkcja ma pobrać id z serwisu ASP.
Znalazłem rozwiązanie w necie:
Trzeba było dodać
'Async:False'

0

Skoro przy synchronicznym żądaniu wszystko jest OK, to i przy async powinno być OK ;)

0

Mam szczerą nadzieję, że nie tworzysz żadnego poważnego projektu - myślenie w stylu wrzucę losowy kod z internetu i będę go permutował, dopóki nie zacznie działać jak chce nie pasuje do niczego innego, jak hobbystycznego kodu klepanego na kolanie bo znajomy poprosił.

$.ajax({
	url: '/get-niemowlak/waga/35000',
	type: 'post',
	data: {
		login: 'jas',
		password: 'fasola',
	}
}).done(function(msg) {
	alert(msg);
}).fail(function() {
	alert('Wystąpił błąd podczas pobierania niemowlaka.');
});

Przerób to pod swoje potrzeby i daj znać jaki jest konkretnie błąd (w tym: czy zwraca coś konsola).

PS http://api.jquery.com/jquery.ajax/

0

Zamieniłem adres na właściwy i jedyne co się pokazywało to Wystąpił błąd podczas pobierania niemowlaka. (w konsoli pusto).

Metoda prób i błędów doszedłem dotego, że po dopisaniu

contentType: 'application/json; charset=utf-8',
async: false

działa, zwracając:
screenshot-20170331201808.png

0

O ile w poprawę sytuacji po ustawieniu contentType jestem w stanie uwierzyć (być może serwer/aplikacja dokładnie filtruje żądania), tak async nie powinno mieć nic wpływu.

Czymś różnią się żądania wysyłane z/bez async (sprawdź w narzędziach deweloperskich) + jaką masz wersję jQuery?

0

Z async:
screenshot-20170331203221.png

bez async:
screenshot-20170331203255.png

Dołączony mam:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

Przy testach wywoływałem metodę HelloWorld bez argumentów.
```javascript
$.ajax({
url: 'http://...........webserwer.pl/WebService1.asmx/HelloWorld',
type: 'post',
contentType: 'application/json; charset=utf-8',
async: false
}).done(function(msg) {
alert(msg);
}).fail(function() {
alert("Wystąpił błąd podczas pobierania niemowlaka.");
});

0

Hm, spróbuj dorzucić może crossDomain: true do wywołania $.ajax().
W ogóle co to jest za serwer, do którego wykonujesz żądanie? Coś Twojego czy zupełnie zewnętrzna usługa?

0

Przy czymś takim:

		$.ajax({
				url: 'http://.......webserwer.pl/WebService1.asmx/HelloWorld',
				type: 'post',	
				contentType: 'application/json; charset=utf-8',
				crossDomain: true
			}).done(function(msg) {
				alert(msg);
			}).fail(function() {
				alert("Wystąpił błąd podczas pobierania niemowlaka.");
			});

niemowlak tez się nie pobiera ;).

Serwer to właściwie szablon z Visuala (wywaliłem póki co moją metodę którą wcześniej próbowałem wywołać), po za odkomentowaniem [System.Web.Script.Services.ScriptService] chyba nic nie zmieniałem :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebApplication1
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [WebService(Namespace = "http://........webserwer.pl/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
     [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }     
    }
}

a wrzucony jest na hosting Windows - mini na webserwer.pl

0

z poziomu codepen.io działa następujący kod

  var a = "http://dotssss.webserwer.pl/WebService1.asmx/HelloWorld";
  $.ajax({
    url: a,
    type: "POST",
    //dataType: "json",
    //crossDomain: true,
    contentType: "application/json; charset=utf-8"
  }).done(function(data) {
    console.log(data);
  });

zwraca

Object {
  d: "Hello  in better World"
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1