2016-07-14 24 views
0

我使用crossdomain ajax來獲取完整的html頁面代碼,但它總是對失敗的按摩進行響應。如何使用jsonp提醒整個html代碼?

consolelog: 「未捕獲的SyntaxError:意外的標記<」

這是我的AJAX功能。

function t(){ 
var url = document.getElementById("url").value; 
$.ajax({ 
    url: 'https://www.google.com/', 
    type: 'GET', 
    crossDomain: true, 
    data:'', 
    dataType: 'jsonp', 
    success: function() { alert("Success"); }, 
    error: function() { alert('Failed!'); }, 

}); 
} 

PS。我不想使用「Access-Control-Allow-Origin」方法來解決這個問題。

任何人有任何的答案PLZ告訴我,THX一個地段

!!更新!

我使用代理來解決這個問題。

首先你必須創建一個代理文件,我用php做個例子。

proxy.php

<?php 
 
$url ='https://www.google.com/searchbyimage?site=search&sa=X&image_url=http://kingofwallpapers.com/apple/apple-015.jpg'; 
 

 
if($_GET['uri']=='') 
 
echo file_get_contents($url); 
 
else 
 
echo file_get_contents($_GET['uri']); 
 
?>

的test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 
<html> 
 
<head> 
 
<title></title> 
 
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> 
 
</head> 
 
<script type="text/javascript"> 
 
//var NewArray = data.toString().split("="); 
 
function t(){ 
 
\t $.get("proxy.php?uri=", function(data) { 
 
\t alert(data); 
 
\t x(data); 
 
\t }); \t 
 
} 
 

 
function x(data){ 
 
\t $.get("proxy.php?uri="+data.toString().split('"')[5], function(data2) { 
 
\t alert("Data Loaded: " + data2); 
 
\t }); 
 
} 
 
</script> 
 
<body onload="t()"> 
 
</body> 
 
</html>

它似乎工作!但我得到一個新的問題。這似乎來自谷歌服務器的錯誤。 我不能使用ajax訪問谷歌imagesearch,它會迴應403錯誤或302移動。

302 moved screen shot

403error screen shot

PS.Maybe我需要一個谷歌的API或我輸給添加任何代碼?

THX大家:)

+0

改變你的成功功能,並讓我知道會發生什麼:成功:功能(數據){警報(數據); }, – Jay

+0

jsonpurl +'?callback = anycallbackfunction' –

+0

@Jay它沒有工作:'( – MIKE

回答

1

不能使用JSONP以這種方式來加載HTML數據。 JSONP將數據加載到當前腳本標記中,以便它期望以javascript的形式執行檢索到的數據;這就是爲什麼你要得到Uncaught SyntaxError: Unexpected token <,這可能與檢索頁面開始處的doctype聲明有關,不能將其作爲JavaScript代碼進行評估。

因此,如果您需要以這種方式加載HTML數據,您首先需要修改服務器響應以將HTML封裝爲JavaScript有效結構(可以是json對象或以HTML作爲參數或其他任何函數調用有效的js方式)。

編輯: 我已經看到您的更新問題與建議的代理腳本和重定向問題。 的file_get_contents功能是不應該支持重定向,使用捲曲,而不是:

<?php 
    $url = 'https://www.google.com/searchbyimage?site=search&sa=X&image_url=http://kingofwallpapers.com/apple/apple-015.jpg'; 

    if(isset($_GET['uri']) && '' !== $_GET['uri']) 
    { 
    $url = urldecode($_GET['uri']); 
    } 

    $curl = curl_init(); 

    curl_setopt_array(
    $curl, 
    [ 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $url, 
     CURLOPT_FOLLOWLOCATION => 1 
    ] 
); 

    $content = curl_exec($curl); 
    curl_close($curl); 

    echo $content; 
?> 
+1

噢,我忘了PS,我不想用」Access-Control-Allow-Origin「方法來解決這個問題。這真的是你的問題的解決方案;) –

+0

感謝您的幫助:),順便說一下,我應該如何使用jsp上的「Access-Control-Allow-Origin」?添加一個jsp響應?我昨天在「www.goole.com」上嘗試過這種方式,但似乎沒有成功:'( – MIKE

0

阿賈克斯網址添加一些文字是這樣的:回調=?然後,服務器必須響應的文字是這樣的:fnName({JSON數據})。jquery會自動翻譯'?'到一個已定義的函數名稱。服務器獲取函數名稱,然後導出。

+0

我知道,但也許有一些方法可以解決我的問題。就像我的新更新,thx爲您的答案:)順便說一句,我現在有一個新問題...:'( – MIKE