2015-06-05 2 views
0

Сначала рассмотрим это: StackoverFlow link.Как отправлять и получать данные формы по Javascript

Здесь Ajax используется для открытия канала Xhttp на сервере и отправки некоторых данных в файл сценария php с использованием метода post. У меня есть файл сценария perl внутри CGI-bin, но это тоже должно работать.

Я хочу отправить данные через JavaScript, чтобы скрипт на Perl, и получить его обратно без страницы освежающим, так что я сделал это:

Javascript:

var basepath = "localhost"; 
var req = new XMLHttpRequest(); 

req.open("POST", basepath+"/perlweb/lox.pl", false); 
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
req.send("script="+this.script); 

req.onreadystatechange = function(){  
    // execute this when ready state changes, i.e. server responds 
    if (req.readyState == 4 && req.Status == 200) { 
     // we got what we wanted 
     console.log(req.responseText); 
    } 
} 

lox.pl мой сценарий имя. Он находится в/perlweb под локальным хостом.

Я создал этот файл в том же месте под названием test.pl:

#! /path/to/perl 
print "Content-type: text/plain\n\n"; 
print "it now works\n"; 

Вызов этого с /localhost/perlweb/test.pl производит ожидаемый результат. Поэтому я думаю, что perl также готов.

Теперь вернемся к JavaScript У меня есть две вещи:

У меня есть это предупреждение:

Synchrone XMLHttpRequests am Haupt-Thread sollte nicht mehr verwendet werden, weil es nachteilige Effekte für das Erlebnis der Endbenutzer hat. Für weitere Hilfe siehe http://xhr.spec.whatwg.org/ 

транслирует на: Синхронный XMLHttpRequest в основном потоке не следует использовать больше, потому что он может иметь устойчивые эффекты (?? sic) для конечного результата конечных пользователей.

Я хочу избавиться от этого, но я не знаю, с чего начать. Подняв ссылку xhr.spec.whatwg.org, меня смущает. Это похоже на полный спецификационный документ.

Может ли кто-нибудь, пожалуйста, просто указать мне на то, что я должен делать?

И у меня есть эта ошибка:

NS_ERROR_DOM_BAD_URI: Access to restricted URI denied 

Хотя файл существует в моей собственной машине (потому что файл существует в моей машине, я предполагаю, что я не ударю вопрос CORS).

В чем же проблема?

ответ

4

Чтобы отправить асинхронно, изменить

req.open("POST", basepath+"/perlweb/lox.pl", false); // false - sync 

в

req.open("POST", basepath+"/perlweb/lox.pl", true); // true - async 

async - An optional boolean parameter, defaulting to true, indicating whether or not to perform the operation asynchronously. If this value is false, the send() method does not return until the response is received. (Ref)

Note: Starting with Gecko 30.0 (Firefox 30.0/Thunderbird 30.0/SeaMonkey 2.27), synchronous requests on the main thread have been deprecated due to the negative effects to the user experience.

Вот почему вы получаете предупреждение "Синхронный XMLHttpRequest в основном потоке не следует использовать больше".


NS_ERROR_DOM_BAD_URI: Access to restricted URI denied

Я предлагаю изменение

var basepath = "localhost"; 

к любой

var basepath = "http://localhost"; or 
var basepath = "/localhost"; 

, потому что, если я не ошибаюсь, вы хотите открыть либо URL или локальный путь на вашей машине, но «localhost» сам по себе не является ни тем, ни другим.

Если у вас все еще есть эта ошибка, см. "NS_ERROR_DOM_BAD_URI: Access to restricted URI denied"

Смежные вопросы