0

Klasik bir ASP web sitesinde JavaScript'i betik dili olarak kullanmaya çalışıyordum. Birkaç hatayla karşılaştım. Birçok JS nesnesi çalışmayacak ve bazı sabitler de. Birisi, JavaScript'i sunucu tarafı bir betik dili olarak kullanmanın sonuçlarını açıklayabilir. Bu, JavaScript destekli bir asp web sitesinde ilk denememdir, bu yüzden bu kodu sağladım.ASP uygulamalarında Sunucu Tarafı JS

<% 
var user = Request.QueryString("name"); 
Response.Cookies("thisUser") = user; 

var expdate = new Date(Date.now().setMinutes(Date.now().getMinutes()+5)); 
Response.Cookies("thisUser").Expires = expdate.toString(); 

function _greet(name) { 
    Response.Write("<p>And also you... <b>" + name + "</b> ...I guess...</p>"); 
} 

%> 
<!doctype html> 
<html> 
<head><title>ASP</title></head> 
<body> 
<% 
Response.Write("<p>Hello World!</p>"); 
if (user != undefined) { 
    _greet(user); 
} 
%> 
</body> 
</html> 

_greet() bağımsız olarak her zaman user tanımsız olmadığına bakılmaksızın çalışır. expdate.toString(), bir tarih türü dizisi döndürmemesi nedeniyle dahili sunucu hatasına neden oluyor. Sadece sayıyı döndürür ve toDateString() desteklenmez! Ve ASP'de JavaScript hata ayıklamak için herhangi bir yolu var mı?

P.S. Zaten varsayılan dili sunucu yöneticisinde JavaScript'e ayarlıyorum (IIS 8.5). Ayrıca sadece bir intranet sitesi olarak test ediyorum.

var user = Request.QueryString("name"); 

Bu null veya boş dize, ancak tanımlanmamış değil olabilir: buradan tanımlamak beri ilk

+0

benim sorunlarını gördüğüm Diğer web sayfalarında çalışmak. Belki bazı konfigürasyonları kaçırırım. – Gouthamm4G

cevap

0

çerez ayarlanırken, sen çerez okumak ve gerçekten sette 5 dakika içinde sona erecek olmadığını kontrol etmek zorunda görmeye denetliyorsanız.

.Expires ayar yyyy-MM-dd H:m biçimi olarak biçimlendirilmiş tarih beklemek gibi görünüyor. (Emin değilim işte bu, farklı varyasyonlarını deneyebilirsiniz kabul SADECE biçimi ise)

<%@ Language= "JavaScript" %> 
<% 

var user = Request.QueryString("name"); 

//set the cookie only if it is not undefined 
if(user+"" != "undefined") 
{ 
    //write the name to cookie 
    Response.Cookies("thisUser") = user; 

    var fiveMinutesLater = new Date(); 
    fiveMinutesLater.setMinutes(fiveMinutesLater.getMinutes() + 5); 

    //Response.Cookies("thisUser").Expires seems to expect the date in yyyy-MM-dd H:m format 
    var formatteddate= fiveMinutesLater.getFullYear()+ "-" +("0" + (fiveMinutesLater.getMonth()+ 1)).slice(-2)+ "-" + ("0" + fiveMinutesLater.getDate()).slice(-2)+ " " + ("0" + fiveMinutesLater.getHours()).slice(-2)+":"+("0" + fiveMinutesLater.getMinutes()).slice(-2) 

    Response.Cookies("thisUser").Expires = formatteddate; 
} 


function _greet(name) { 
    Response.Write("<p>And also you... <b>" + name + "</b> ...I guess...</p>"); 
} 
%> 
<!doctype html> 
<html> 
<head><title>ASP</title></head> 
<body> 
<% 
Response.Write("<p>Hello World!</p>"); 

//Read the cookie. 
var thisUser = Request.Cookies("thisUser"); 

if (thisUser != "") { 
    _greet(thisUser); 
} 
%> 
</body> 
</html> 
+0

Neden "undefined" tanınmıyor? – Gouthamm4G

+0

Ayrıca tarayıcı konsolunda son kullanma tarihini görüntülediğimde, GMT'deydi. Bu normal mi? Ancak betikte sistem yerel saati. – Gouthamm4G

0

, değişken user, sizin if blokta tanımsız asla. Dolayısıyla, sadece yerine böyle kontrolü gerçekleştirmek:

if ((user + "").length > 0) { 
    _greet(user); 
} 

Bu

uzunluğunu kontrol edecek ve bir şeydir yalnızca işlevini orada çalıştırır.


İkinci olarak, Kurabiye örneğinin .Expires özelliği bir dize, zaten bir tarih almalısınız. Sadece .toString() çağrıyı kaldırmak ve çalışması gerekir:

Response.Cookies("thisUser").Expires = expdate; 
+0

İlk kez denedim ve işe yaramadı. Ayrıca toDateString() ve toUTCString() ile biçimlendirmeyi denedim, ancak bunlar da işe yaramadı. – Gouthamm4G