soum
soum

Reputation: 1159

how to read javascript variable from ajax success callback function

I am doing

$.ajax({
    type: "GET",
    url: url, //valid url..The ajax part works fine
    dataType: 'html',
    success: function(response) {

        if (loginStatus !== 'false') {
            testFunction(response); //assuming there is a function called testFunction
        }
    }
});

The response is a mixed content of html and it also contains

<script>var loginStatus = 'false'</script>

if(loginStatus !== 'false') does not work in the success. What am I doing wrong?

The response looks like this

<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>

<body>
This is a test page
<script>var loginStatus = 'false'</script>
</body>

</html>

Upvotes: 2

Views: 2558

Answers (3)

David M.
David M.

Reputation: 773

The solution is not pretty. This would be much easier if the response was JSON. Why can't I parse a Ajax html GET response in jQuery? provides hints to a potential solution.

You will have to parse the HTML that gets returned. The bad part is that the Javascript part will have to be evald (bad practice!) unless you do some regular expression magic get the value of the variable.

UPDATE (DON'T DO THIS):

Again, disclaimer, this is bad practice, but it's possible. The following is just a proof of concept applied to your code. There is also a JSFiddle with the basic idea. Basically, you parse the response with JQuery's .parseHTML method and evaluate the script with .globalEval at which point the variable becomes available to check.

$.ajax({
  type: "GET",
  url: url, //valid url..The ajax part works fine
  dataType: 'html',
  success: function(response) {
    var scriptContent = $($.parseHTML(response, document, true)).filter('script').text();
    $.globalEval(scriptContent);
    // at this point, the variable loginStatus should be defined

    if (loginStatus !== 'false') {
        testFunction(response); //assuming there is a function called testFunction
    }
  }
});

Another reference: jQuery - script tags in the HTML are parsed out by jQuery and not executed

Upvotes: 3

leofukui
leofukui

Reputation: 27

I think you can't access a variable inside ajax return because its javascript is not interpreted.

It's not a good idea (and you could have others problems) but you can put the return to some hidden iframe and access the variable inside using something like:

document.getElementById("iframeId").contentWindow.loginStatus

If you have control of the page that you are retrieving the ajax result, I recommend you to response only the variable content or a json to manipulate easily in your javascript.

Upvotes: 1

Eldhose Elias
Eldhose Elias

Reputation: 449

$.ajax({
    type: "GET",
    url: 'loginCheck.php', //valid url..The ajax part works fine
    dataType: 'html',
    success: function(response) {
        if (response == "YES") {
         testFunction(response); //assuming there is a function called testFunction
        }
    }
});

loginCheck.php

// check the username and password if it matches with the username and password in the database . then echo "YES" otherwise echo "NO"
i explained this login concept using PHP scripting language.

Upvotes: 0

Related Questions