Home > Software design >  window.location.replace is always undefined
window.location.replace is always undefined

Time:09-07

i have a ajax post that i need to redirect to redirect url on success. in the browser debugger i do c the correct url but im always getting "MYURL/undefined".

 $.ajax({
            type: 'POST',
            url: "/NewsLetter/Create",
            contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
            data: data,

            success: function(result) { //debug >result={urlOne:'https://localhost:7077'}
                //  alert('Successfully received Data ');

                if (result.UrlOne !== undefined) {
                    window.location.replace(result.UrlOne);
                } else {
                    window.location.replace(result.UrlTwo);
                }
                console.log(result);
            },
            error: function(error) {
                alert('Failed to receive the Data');
                console.log(JSON.stringify(error));
                console.log('Failed ');
            }
        });

in my controller:

 if (ModelState.IsValid && isNewUser == null)
        {
           //remove for clear code
            return Json(new { UrlOne = Url.ActionLink("Index","Home")});
        }

        TempData["ErrorMes"] = "You are allready register";
        return Json(new { UrlTwo = Url.ActionLink("_RegNews", "NewsLetter") });

CodePudding user response:

Please check the return json from controller:

enter image description here

You will find that the key is urlOne instead of UrlOne.

Javascript is case sensitive, So you need to change your code like:

if (result.urlOne !== undefined) {
                    window.location.replace(result.urlOne);
                } else {
                    window.location.replace(result.urlTwo);
                }

CodePudding user response:

Pass the JsonSerializerOptions as a parameter when creating the Json object to make property's name case-sensitive during deserialization. The JsonSerializerOptions has PropertyNameCaseInsensitive property that by default set to false. This will prevent the Json serializer to change names to be camel-cased.


var options = new System.Text.Json.JsonSerializerOptions();

if (ModelState.IsValid && isNewUser == null)
{
   //remove for clear code
    return Json(new { UrlOne = Url.ActionLink("Index","Home")}, options);
}

TempData["ErrorMes"] = "You are allready register";
return Json(new { UrlTwo = Url.ActionLink("_RegNews", "NewsLetter") }, options);

JsonSerializerOptions Class

  • Related