2013-10-16 14 views
11

Ho ricevuto il seguente errore: jquery ajax readystate 0 responsetext status 0 statustext error quando lo ha fornito: url(http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm), tuttavia funziona correttamente quando lo prendo url(localhost:""/embparse_page) sul mio localhost.jquery ajax readystate 0 stato di responsetext 0 statustext errore

Ho provato a utilizzare le intestazioni che ho trovato su una ricerca di Google, e ho usato anche beforeSend:"", ma non funziona ancora.

Penso che il problema principale sia: XMLHttpRequest cannot load http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm. Origin "local server" is not allowed by Access-Control-Allow-Origin. ma non lo capisco.

Qualcuno può spiegarmi il problema, visto che sono abbastanza nuovo in questo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns:ng="http://angularjs.org"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta Access-Control-Allow-Origin="*" /> 
    <title>Page Parsing</title> 
    <script type="text/javascript" src="/js/jquery-1.9.1.min.js"></script> 
    <script> 
    getit=function(){ 
     jQuery.support.cors = true; 
     $.ajax({ 
      type:"GET", 
      url:"http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm", 
      dataType:"html", 
      crossDomain:true, 
      beforeSend: function(xhr) { 
       xhr.overrideMimeType('text/plain;charset=UTF-8'); 
      }, 
      success:function(XMLHttpRequest,jqXHR ,data) { 
       //alert(data.title); 
       var starttitl=data.lastIndexOf('<title>'); 
       var endtitl=data.lastIndexOf('</title>'); 
       var title1=data.substring(starttitl+7,endtitl); 
       alert(title1); 
      }, 
      error:function(errorStatus,xhr) { 
       alert("Error"+JSON.stringify(errorStatus)); 
      } 
     }); 
    } 
    </script> 
</head> 
<body> 
    <div id="siteloader"> 
     <input type="button" onclick="getit()" /> 
    </div> 
</body> 
</html> 
+4

Un consiglio: non utilizzare avviso in quanto è il modo più irritante per eseguire il debug. Prova 'console.log' e premi F12 in Chrome o control + shift + k in firefox per aprire la console. Ci sono molti strumenti che puoi usare come impostare i breakpoint e ispezionare le richieste con le intestazioni di richiesta e risposta. – HMR

+0

grazie signore per il suggerimento –

+0

La top rated risposta su questo post è abbastanza in profondità: http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

risposta

16

Stavo ricevendo questo errore e nel mio caso non era dovuto alla stessa politica di origine. Ho avuto qualche aiuto da this link

Il mio caso è stato, ho avuto un pulsante di collegamento e non stavo usando e.PreventDefault()

ASPX

<asp:LinkButton ID="lnkSearch" runat="server" CssClass="DockCmdSearch" CommandName="Search" OnClientClick="return VerifySearch(this, event);" /> 

Javascript

function VerifySearch(sender, e) {   
    e.preventDefault(); 
    $.ajax({ 
       type: 'POST', 
    ............. 
    } 
    return false; 
} 
+0

La risposta più votati su questo post è abbastanza in profondità: http: // stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

0

stessa politica di origine. il browser non permette quando si è in

http://site1.com 

per la connessione a:

site2.com 
sub.site1.com 
site1:99.com 
https://site1.com (not sure about this one) 

Questo è così sito1 non può rubare il contenuto da site2 e far finta che sia il contenuto della sito1. I modi sono JSONP (uso di google maps che penso) e avere site2 fornire le intestazioni cors ma i cors non sono supportati in jQuery 1. * (forse non in 2. * entrambi) perché IE ha alcuni problemi nell'implementarlo. In entrambe le situazioni è necessario che site2 collabori con il proprio sito in modo che il sito possa visualizzarne il contenuto.

Se si utilizza solo questo, quindi è possibile utilizzare Firefox e installare il plugin Forececors. Per attivare puoi scegliere view => barre degli strumenti => aggiungi sulla barra e clicca sul testo "cors" nella parte in basso a destra dello schermo.

+0

Ma possiamo farlo concetto (puoi accedere al contenuto di site2 da site1) in php usando cURL(). Quindi, se c'è qualcosa di simile in javascript plz, dimmi –

+0

Sì, puoi richiedere i proxy tramite il tuo server ma stai violando la proprietà ip del sito da cui ricevi il tuo contenuto. Qualche grande supermercato ha fatto questo e quando l'altro sito lo ha rilevato ha alimentato le informazioni fasulle del sito del supermercato con le foto di teste tagliate e simili. Questo è stato un modo giocoso ed efficace, potrebbe anche essere un avvocato bussare alla tua porta – HMR

+0

@DhirenderTyagi Il proxy attraverso php è un'opzione se site2 non vuole il vostro sito per visualizzare il suo contenuto o vuole, ma non si preoccupa abbastanza per creare un'API JSON. Questo non può essere fatto in JavaScript perché JavaScript viene eseguito nel browser ed è il browser che applica la stessa politica di origine per proteggere i siti dall'avere il loro contenuto acquisito e presentato su altri siti. Almeno con il metodo proxy site2 può rilevare una richiesta molto proveniente dallo stesso IP. – HMR

-3

Stavo testando un file txt/XML per json/xml dati e ottenuto un errore ...i valori letti: Status[0] & readyState[0] e StatusText[error]; Questo stava lavorando con successo su Internet Explorer, ma non su Chrome perché il dominio doveva essere lo stesso

Questo è ciò che è stato risolto

Vai a C: \ WINDOWS \ system32 \ drivers \ etc \ hosts

mettere un nome contro il tuo localhost app:

127.0.0.1 SampleSiteName.com 

Ora aprire il codice di chrome come http://SampleSiteName.com/YourAjaxFileName.htm (se apre, significa che hai inserito correttamente il nome di un host) vai al tuo file HTML e fornisci un indirizzo relativo del file che stai cercando di leggere (se FileToBeRead.txt si trova nella stessa cartella di YourAjaxFileName.htm, quindi inserisci solo url: " /FileToBeRead.txt ")

Ora il tuo codice funzionerà anche su Chrome.

+0

non vedo come questo possa ottenere contenuti da un sito remoto. La tua richiesta Ajax si collegherebbe al tuo computer locale solo perché risolverebbe il nome del dominio rimosso su 127.0.0.1. – Adrian

+1

Su stackoverflow, per creare una nuova riga nel tuo post, devi usare '
' o creare 2 nuove linee. Vedi la mia modifica. –

+0

whoops mi dispiace è tardi per me – Adrian

0

Stavo ricevendo quell'errore dalla mia chiamata Ajax, e quello che per me è stato risolto è stato semplicemente inserire il 'return false'.

Problemi correlati