2016-04-16 8 views
2

Ich benutze dieses Skript, um benutzerdefinierte Subdomains zu öffnen, die bereits existieren. Seit ich Ajax für das Kontaktformular benutze, wird es nicht funktionieren.Erhalte diesen Fehler: XMLHttpRequest kann nicht geladen werden javascript: newDoc()

ERROR:(jquery.js:4 XMLHttpRequest cannot load javascript:newDoc(). Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.)

Kann mir bitte jemand helfen?

SCRIPT

<script> 
    function newDoc() { 
    window.location.href = "http://" + $("#domain").val() + ".mywebsite.com"; 
}</script> 

HTML

<form action="JavaScript:newDoc()" method="post" role="form" id="login-form" class="cd-form"> 
    <div class="row"> 
    <div class="col-xs-12 text-center sign-in-text"> 
    <p>Enter your company's <span>MyWebsite domain.</span></p> 
    </div> 
<div class="user-box-1 col-xs-8"> 
    <input type="text" name="domain" id="domain" class="form-control" placeholder="Domain" value="" required=""> 
</div> 
<div class="text-domain col-xs-4"> 
    .mywebsite.com 
</div> 
</div> 
<p class="fieldset"> 
<button class="full-width" type="submit">Continue</button> 
</p> 
</form> 

Antwort

0

Verwendung dieses

function newDoc() { 
    return "http://" + $("#domain").val() + ".mywebsite.com"; 
} 
1

Der Grund dies geschieht, weil Sie ein "javascript:" verwenden URI und die AJAX Handhabung verwendet dies als Ziel.

Hier ist ein Beispiel:

https://jsfiddle.net/L4z0Le4f/

function foo() { 
    return 'https://api.ipify.org/'; 
} 

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'javascript:foo()'); 
xhr.onload = function() { 
    console.log('Loaded'); 
} 
xhr.onerror = function() { 
    console.log('Failed'); 
} 
xhr.send(); 

Dies wird auch scheitern. Es sieht so aus, als würde das Verhalten, das dein Formular wirklich will, darin bestehen, die JavaScript-Funktion bei submit auszuführen, ohne überhaupt AJAX zu verwenden.

Dieses besser von einem zum Beispiel ‚Senden‘ Ereignishandler behandelt würden (mit jQuery):

$('#login-form').on('submit', function() { 
    newDoc(); 
    return false; 
}; 

Wenn Sie das tun wollen, tatsächlich zu dieser URL zu veröffentlichen, wenn sie einreichen klicken, können Sie die ändern Aktionswert in einem Übergabe-Handler. Hier ein Beispiel:

https://jsfiddle.net/bu1j00Le/

<form action="javascript:alert(1);" method="post"> 
    <input type="text" name="testing" id="q" /> 
    <button type="submit">Make it happen</button> 
</form> 

$('form').on('submit', function() { 
    this.action = '/echo/js/?js=' + encodeURIComponent(JSON.stringify($('#q').val())); 
}); 

Natürlich hängt es davon ab, was bestellen Sie die Ereignisse Feuer in - wenn der AJAX-Code anschließend auf Ereignisse hört, kann es sie abfangen, bevor diese neuen Handler tut. Um dies zu vermeiden, können Sie auch eine "Änderung" -Ereignisbehandlungsroutine für das Feld verwenden, um die Formularaktion auf sehr ähnliche Weise zu ändern:

+0

Vielen Dank für die Erklärung! Ich schätze es sehr. –

Verwandte Themen