2017-02-18 69 views
0
<script> 
    window.addEventListener('load',function(){ 
    var unique_code="3412313ad"// Initialize it with the unique code provided to you. 
    var param1="1"; // Initialize this with the value that you wish to see.For example 1 for navbar display , 2 for the side floating pop up 
        //while 3 for a transparent overlay on the whole page. 
    var domain=window.location.hostname;// current domain. 
    function jsonp(url, callback) { 
    var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random()); 
    window[callbackName] = function(data) { 
    delete window[callbackName]; 
    document.body.removeChild(script); 
    callback(data); 
    }; 
    var script = document.createElement('script'); 
    script.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + 'callback=' + callbackName; 
    document.body.appendChild(script); 
    script.onerror=function(){ 
     alert("failed to load snippet!"); 
    } 
    } 

    jsonp('http://localhost/server.php?unique_code='+unique_code+'&domain='+domain, function(data) { 
     alert(data); 
    if(data.status=='success'){ 
     alert('success'); 
    }else alert(data.reason); 
    }); 
    }); 
</script> 

這是一個代碼,它模仿jquery的jsonp從遠程服務器獲取腳本。在javascript中模仿jsonp

我曾經在這個問題給出了答案JavaScript XMLHttpRequest using JsonP

服務器端代碼將

if(isset($_GET['unique_code']) && !empty($_GET['unique_code']) && isset($_GET['domain']) && !empty($_GET['domain'])){ 
    $unique_code=$_GET['unique_code']; 
    $domain=$_GET['domain']; 

    $statement=$mysqli->prepare('select * from `snippet_users` where unique_code=? AND domain=?'); 
    $statement->bind_param('ss',$unique_code,$domain); 
    if(!$statement->execute()) 
    die(json_encode(array('status'=>'error','reason'=>'Server error.'))); 
    $result=$statement->get_result(); 

    if(mysqli_num_rows($result)>0) 
     die (json_encode(array('status'=>'success'))); 
    else die(json_encode(array('status'=>'error','reason'=>'Unique code/Domain error.'))); 
}else{ 
    die(json_encode(array('status'=>'error','reason'=>'Unique code/Domain error.'))); 
} 

一切工作完全正常,但我看到的錯誤在控制檯,有點像這樣:

enter image description here

什麼是我的解決方案,以便我不會得到這個錯誤,以及我得到我的數據警報框?

回答

1

您正在輸出application/json而不是application/javascript,所以您的瀏覽器認爲它無效。 json應該在函數調用(回調參數)中。回調參數應該在服務器端進行驗證然而,防止XSS注射:

Is it necessary to validate or escape the jsonp callback string

+0

你會用一個代碼或什麼編輯? –

+1

您在url中發送的回調參數應該用在ajax腳本的輸出中,即'jsonp_callback_123123123({status:'error',reason:'wtf'})''。否則,瀏覽器不知道如何處理該對象。 –

+0

這就是我一直在尋找,謝謝一噸。 –