Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why I can't fetch data on the sometime by using curl_setopt and Ajax jquery?

I'm query data from another sever by using curl_setopt PHP and Ajax I've already to test my below function it is work but it seem not smooth enough because sometime when I try to refresh and internet got a little big slow I will never got data.How ever when i check on firebug in Firefox I found as below json respond.

"<html><head>

<meta http-equiv="refresh" content="0;url=http:MyPartnerWebsite!queryLuckNumberRecordByPeriods.action?gwqqnhmpepceiqqn">

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="expires" content="-1">

</head><body></body></html>

"

*I'm got stuck right now because I don't know how to do with this respond *

private function http_code() {

    $ch = curl_init();
    if (!$ch) {
        die("Couldn't initialize a cURL handle");
    }

    $ret = curl_setopt($ch, CURLOPT_URL, "http://Mypartnerwebsite!queryLuckNumberRecordByPeriods.action");
    $ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $ret = curl_setopt($ch, CURLINFO_PRETRANSFER_TIME, 0.1);
    $ret = curl_setopt($ch, CURLINFO_HTTP_CODE, true);
    $ret = curl_setopt($ch, CURLOPT_PRIVATE, false);
    $ret = curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    $ret = curl_exec($ch);
    $data;
    $res;
    if (empty($ret)) {
        $res = 0;
        $data = 0; // Partner server slow.
        curl_close($ch);
    } else {

        $info = curl_getinfo($ch);
        curl_close($ch);
        if (empty($info['http_code'])) {
            $res = 01;
            $data = 01; // Got empty date from partner server
        } else {
            if ($this->errorType($info['http_code']) == TRUE) { // errors type
                $data = $ret;
                $res = $this->errorType($info['http_code']);
            } else {
                $data = $ret;
                $res = 'unknowError';
            }
        }
    }
    echo json_encode(array('res' => $res, 'data' => $ret));
}

This is a function to check to know what type of server errors respond Purpose I want to checking when my partner server errors and I will send this kind of errors to my website for make sure what kind of errors.

private function errorType($haystack) {

    $errors = array(404, 200, 201, 204, 500, 501, 502, 503, 504, 505, 100, 203);
    if (in_array($haystack, $errors)) {
        return $haystack;
    } else {
        return FALSE;
    }
}

Here is Jquery Ajax to fetch data from my own server

$.ajax({
    method: "GET",
    url: "<?PHP echo base_url('getcurrentday'); ?>",
    dataType: "JSON",
    beforeSend: function (xhr) {
    },
    success: function (data, textStatus, jqXHR) {
        $(".loading").html("");
        if (data.res !== 200) {
            $("<p>Errors type:"+data.res+"</p>").appendTo(".errors");
        } else {
        if (data.data == false) {
            getdata();// I want to reload Ajax if I got respond false and my data = '';
        }
        $.each(eval(ldata), function (i, val) {
            $(val.anydata").appendTo(".result");
        })
    }
    }
});

Please help.

like image 396
DMS-KH Avatar asked Nov 10 '22 00:11

DMS-KH


1 Answers

It seems that your ajax call gets a timeout and therefor it is not always working. You can increase the timeout setting of ajax.

Furthermore you can add an error function to see when errors like timeouts occur.

$.ajax({
    //your ajax code here...
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus, errorThrown);
    },
    timeout: 10000 // sets timeout to 10 seconds
});

The reason you still see the response in firebug is that the browser will anyways receive the server response, even on timeout, but it will not reach your jquery code.

like image 175
Bas van Stein Avatar answered Nov 14 '22 23:11

Bas van Stein