2009-06-10 23 views
20

まずは、ページを設定する理想的な方法ではありませんが、スクリプトを1つのファイルとして配布する必要があります。Firefoxエラー '要素が見つかりません'

javascriptが付いたxhtmlドキュメントの上部にphpスクリプトがあります。特定の条件下では、XHRを使用してページ自体にクエリ文字列を送信します。一番上のphpがアクティブになり、渡されたコンテンツをセッションとして保存した後、自身を強制終了します(exit())。 XHRは非同期であり、コンテンツを返すかどうかはチェックされません。

Firefox 3では、XHR要求が送信されるたびに、エラーコンソールにエラーno element foundがスローされます。また、私がexit('Done')のような出口を使用した場合、Firefoxは可視のDOMに挿入するかのように構文エラー(完了)をスローします。これはOperaでは起こりそうにないようです。

既に生成されたxhtmlページからセッションを保存する方が良いですか?明らかに私は別のページにXHRすることができましたが、私はそれをすべて1つのスクリプトに保存したいと思います。 FirefoxはDOMへの更新としてXHRリクエストを自己に扱いますか?私はなぜこのエラーを送信しているのかわかりません。


更新私が言ったようにXHRリクエストが行われたときに、Firefoxが唯一のエラーをthows。このページは有効なXHTMLであり、XHR要求がページ自体に対して行われていない限り、エラーなく完全に動作します。

本当に何も返さないので、なぜエラーを送信しているのだろうと思っていました。

ここでは、オブジェクトからajaxリクエストを行うjavascriptスニペットを示します。 コールバック関数を使用せずにXHRオブジェクトを作成し、情報を通知します。同じページを参照していないときは正しく動作します。

var saveState = { saveContent: function(updateActiveMenu) { 
    var sendState = new ajaxObject(gV.url); 
    if (!updateActiveMenu) { 
     var storageContainer = document.getElementById("StorageContainer").innerHTML; 
     var menu = document.getElementById("Nav").innerHTML; 
     sendState.update("Containerstring="+urlencode(storageContainer)+"&Nav="+urlencode(menu)+"&Active="+gV.activeMenuItem, 'POST', true); } }, } 

とPHPは、この

if (isset($_REQUEST['Containerstring']) && isset($_REQUEST['Nav']) && isset($_REQUEST['Active'])) { 
    $_SESSION['Containerarray'] = (saveContainer(regulateEscapes(urldecode($_REQUEST['Containerstring'])))); 
    $_SESSION['Navarray'] = (saveNav(regulateEscapes(urldecode($_REQUEST['Nav'])))); 
    $_SESSION['Active'] = $_REQUEST['Active']; 
    exit('Done'); 
} 

は、私も、私はinnerHTMLプロパティを使用してすべきではありません知っていませんが、それはまた別の話


エラーがこの

Error: no element found 
Source File: http://localhost/ajax.php?1244648094055 
Line: 1 
あります

エラーは、p私が使用しているhpページは、決して呼び出されないクエリ文字列を参照します。

+0

説明している内容に多少の矛盾があります。 xhrが返された値(決して 'Done')を使用しない場合、DOMに挿入することはできません。 – SilentGhost

+0

あなたのコードのいくつかの小さな例を投稿してください。 – SilentGhost

+0

なぜページのソースの関連部分を入れないのですか? –

答えて

25

Firefoxは、XMLとして戻って解析できるものを取得し、空の応答を受け取ったときにXML解析エラーをスローします。

あなたのPHPは

header('Content-Type: text/plain'); 

を使用し、「終了()」を呼び出し、FirefoxはXMLとして応答を解析しようとしないだろう、とエラーがあってはならない。前に

+0

" HTTP/1.0 200 "ヘッダーを使用し、間違った;)これは、おかげで多く働いた。 –

+0

私の場合は、サーバーから空の応答を返送していました.jQueryはxmlを予想して解析します。私は単に「成功」​​を返して、問題を解決しました。あなたも私に助けてくれました。ありがとう – sidonaldson

-2

あなたが何かをしなくても、あなたのPHPは有効なHTTP応答を返すべきです。Firefoxはそれを読み込もうとします。少なくとも有効なヘッダーを返すようにしてください。

header("HTTP/1.0 200"); 
exit(); 
+1

このソリューションは動作しませんでしたが、 'Content-Type'ヘッダーは機能しませんでした。 –

関連する問題