Javascript InvalidStateError,必须打开对象状态
此JavaScript代码应该读取xml文档并将其输出到表中。如果用户选择出价,则提示将要求输入新值,并且起始价格将立即更改。然而,我的代码并非如此。当我单击Bid按钮来更新值时,它会收到一个新的价格并将其附加到xml中。但是,页面上的起始价格不变。我发现这个错误发生在我提交第一个javascript函数中的按钮时。该错误是未捕获的InvalidStateError:未能对“XMLHttpRequest”执行“发送”:必须打开对象的状态。 有没有办法解决这个问题 这是JavaScriptJavascript InvalidStateError,必须打开对象状态,javascript,php,jquery,ajax,xml,Javascript,Php,Jquery,Ajax,Xml,此JavaScript代码应该读取xml文档并将其输出到表中。如果用户选择出价,则提示将要求输入新值,并且起始价格将立即更改。然而,我的代码并非如此。当我单击Bid按钮来更新值时,它会收到一个新的价格并将其附加到xml中。但是,页面上的起始价格不变。我发现这个错误发生在我提交第一个javascript函数中的按钮时。该错误是未捕获的InvalidStateError:未能对“XMLHttpRequest”执行“发送”:必须打开对象的状态。 有没有办法解决这个问题 这是JavaScript var
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
function loadXMLDoc(url)
{
var table
var item
var items
var i;
var sendoff;
xmlhttp.onreadystatechange=function()
{
if ((xmlhttp.readyState == 4) &&(xmlhttp.status == 200))
{
table="<table>";
var serverResponse = xmlhttp.responseXML;
item=serverResponse.documentElement.getElementsByTagName("Product");
for (i=0;i<item.length;i++)
{
table=table + "<tr>";
items=item[i].getElementsByTagName("ItemName");
{
table=table + "<td>Item Name : </td>"+"<td>" + items[0].firstChild.nodeValue + "</td>";
iname = items[0].firstChild.nodeValue;
//document.getElementById('test').innerHTML=sendoff;
}
table=table + "</tr>";
table=table + "<tr>";
items=item[i].getElementsByTagName("Category");
{
table=table + "<td>Category : </td>"+"<td>" + items[0].firstChild.nodeValue + "</td>";
}
table=table + "</tr>";
table=table + "<tr>";
items=item[i].getElementsByTagName("Description");
{
table=table + "<td>Description : </td>"+"<td>" + items[0].firstChild.nodeValue + "</td>";
}
table=table + "</tr>";
table=table + "<tr>";
items=item[i].getElementsByTagName("StartPrice");
{
table=table + "<td>Start Price : </td>"+"<td>" + items[0].firstChild.nodeValue + "</td>";
}
table=table + "</tr>";
table=table + "<tr>";
items=item[i].getElementsByTagName("Owner");
{
table=table + "<td>Owner : </td>"+"<td>" + items[0].firstChild.nodeValue + "</td>";
iowner = items[0].firstChild.nodeValue;
//document.getElementById('test').innerHTML="AA"+iowner;
}
table=table + "</tr>";
table=table + "<tr>";
table=table + "<td><input type=\"submit\" onclick=\"itembid('"+ iname + "','"+ iowner +"')\" value=\"Bid\"></td>";
table=table + "<td><input type=\"submit\" onclick=\"\" value=\"Buy It Now\"></td>";
table=table + "</tr>";
}
table=table + "</table>";
document.getElementById('listinglist').innerHTML=table;
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function itembid(iname,iowner)
{
var newbid = prompt("Please enter your bidding price");
var itemname = iname;
var ownername = iowner;
xmlhttp.open("GET", "readxml.php?newbid=" + encodeURIComponent(newbid) + "&itemname=" + encodeURIComponent(itemname) + "&ownername=" + encodeURIComponent(ownername) +"&date="+ Number(new Date), true);
xmlhttp.send();
xmlhttp.onreadystatechange = loadXMLDoc;
}
这是第二个函数调用的php页面
<?php
require_once("sessioncheck.php");
header('Content-Type: text/xml');
?>
<?php
$newbid = $_GET["newbid"];
$itemname = $_GET["itemname"];
$ownername = $_GET["ownername"];
if (!empty($_SESSION['fname']))
{
toXml($newbid,$itemname,$ownername);
}
function toXml($newbid,$itemname,$ownername)
{
//compare passed owner name to internal xml owner name
//echo "BB".$newbid.$itemname.$ownername;
$xml = simplexml_load_file("auction.xml");
$sxe = new SimpleXMLElement($xml->asXML());
foreach($sxe->children() as $items)
{
if($items->ItemName == $itemname)
{
//echo "Current Price".$items->StartPrice;
$items->StartPrice = $newbid;
//echo "New Price".$items->StartPrice;
}
}
$sxe->asXML("auction.xml");
return $sxe;
//print_r($xml);
}
这是否可以链接到html文件主体中的onload函数
使用似乎未定义的变量url的多个请求。重复的onreadystatechange分配…很难计算出您试图在此处发出多少请求。我得到的印象是它是一个…但我看到3变量url是从html传递的auction.xml。我应该从第一个函数中删除onreadystatechange吗?我以前尝试过,但是它阻止了表的出现。我应该通过普通javascript读取xml文件,然后在第二个函数中只使用onreadystatechange吗?