コードに奇妙な問題があり、理解できないようです。私はjsに比較的慣れておらず、httpリクエストを利用してjsonデータを取得していますが、ほとんどの場合、機能するコードを思いつくことができました.
基本的なワークフローは次のとおりです。ユーザーにいくつかのフォーム フィールド値を入力して送信ボタンを選択してもらいます。送信時にapiCall()
関数が呼び出され、関数createXMLHttpRequestObject()
と関数が呼び出されconstructApiURL(searchtype)
てオブジェクトが作成、設定xmlHttpRequest
され、プロキシ経由で検索 API URL に送信されます。結果が返されると、関数が呼び出され、関数を使用して適切なコンテナーhandleResults()
に結果が解析および表示されます。div
handleResultsContainer()
Firebug を介してコードをステップ実行すると、すべてが機能します。オブジェクトが作成され、プロキシ経由で検索 API に送信され、結果が返されて表示されますが、フォーカスが関数に戻りonsubmit(event) {callApi();}
、コンテンツがクリアされると!?! ページがリロードされたのか、それとも何か他のことが起こっているのかわかりません。
初期トリガーをフォーム送信からボタン onclick に変更すると、問題なく動作します。ユーザーがボタンを選択すると、検索結果が取得されて表示され、ユーザーが再度ボタンを選択すると結果がクリアされ、新しい結果が表示されます。問題は、通常フォームから取得するパラメーターをハードコーディングする必要があることです。
誰かがこれを経験したことがありますか、またはこれを引き起こす可能性のあるブラウザによるコードの読み取り方法で何かを見たことがありますか? 私の疑似コードは以下の通りです。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function createXMLHttpRequestObject() {
-- code to create the XMLHttpRequestObject based on browser type --
}
function constructApiURL(searchtype) {
-- code to create the api url using the form values & proxy url --
}
function handleResultsContainer () {
-- code to create/remove search results display div
}
function handleResults(jsndata) {
-- code to parse and display results here --
}
function callApi() {
-- code to create XMLHttpRequestObject, populate it, and send it --
}
</script>
</head>
<body>
<form id="basicform" name="mashsearch" onsubmit="callApi()">
-- Code for user input fields which are then used by constructApiURL --
<input type="submit" id="searchbtn" value="Search!"/>
</form>
//Div displaying a Search Results Loading… message which is hidden/displayed//
<div id='loadingDiv' style="display:none">Search Results Loading...</div>
//Div used to display the search results
<div id='json'></div>
</body>
</html>