我目前正在尝试开发一个API,我现在所处的阶段是用一个完整的数据集(ID,名字,姓氏,道布等)来填充表。
我写这段代码的方式是使用一个从1到500,000的cfloop (因为我不知道is的范围是从什么范围到什么范围),并在每个cfloop中调用一个函数,向服务器发出cfhttp请求并检索内容。
然后,我对返回的JSON进行反序列化,调用一个函数来查询表,以查看当前项ID是否已经存在,如果不存在,则调用一个函数来插入记录。
然而,cfloop似乎在300请求标记附近停止了,所以我想知道是否有更好的方法来做我正在做的事情?也许可以使用CFTHREAD标记,而我从来没有使用过这个标记。
这段代码如下所示:
<cfset Variables.url = "someurl.html" />
<cfloop from=100000 to=500000 index="itemNo">
<cfset Variables.itemID = itemNo />
<cfset getItemData = Application.cfcs.Person.getPersonData(Variables.url,Variables.itemID) />
<cfif StructKeyExists(Variables,"getPersonData.FileContent")>
<cfset Variables.getPersonData = DeserializeJSON(getPersonData.FileContent)>
<cfscript>
// CHECK IF PERSON ALREADY IN DATABASE
Variables.getPerson = Application.cfcs.Person.getPersonRecord(Variables.itemID);
// INSERT ITEM IN TO TABLE
Variables.DOB = CreateDate(Year(Variables.getPersonData.Item.DateOfBirth.Year),Month(Variables.getPersonData.Item.DateOfBirth.Month),Day(Variables.getPersonData.Item.DateOfBirth.Day));
Variables.insPerson = Application.cfcs.Person.insPerson(Variables.getPersonData.personID,Variables.getPersonData.Item.FirstName,Variables.getPersonData.Item.LastName,Variables.getPersonData.Item.CommonName,Variables.DOB);
</cfscript>
</cfif>
</cfloop>发布于 2013-06-28 04:22:51
是的,这是可能的。您需要拆分呼叫。创建一个简单的htlm页面,它用javascript生成xmlhttprequest。我还没有测试下面的例子,但它应该可以工作。
<script>
var itemNo= 1;
function download()
{
var xhr = new XMLHttpRequest();
xhr.open("GET", "getdata.cfm?itemNo="+itemNo, true);
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200)
{
itemNo++;
if(itemNo<=500000) download();
}
else
{
itemNo++;
// Error handling
}
}
};
xhr.onerror = function (e) {
itemNo++;
// Error handling
};
xhr.send(null);
}
</script>在请求的页面上,调用发出cfhttp请求的对象。
<!--- getdata.cfm --->
<cfset Variables.url = "someurl.html" />
<cfset Variables.itemID = itemNo />
<cfset getItemData = Application.cfcs.Person.getPersonData(Variables.url,Variables.itemID) />
<cfif StructKeyExists(Variables,"getPersonData.FileContent")>
<cfset Variables.getPersonData = DeserializeJSON(getPersonData.FileContent)>
<cfscript>
// CHECK IF PERSON ALREADY IN DATABASE
Variables.getPerson = Application.cfcs.Person.getPersonRecord(Variables.itemID);
// INSERT ITEM IN TO TABLE
Variables.DOB = CreateDate(Year(Variables.getPersonData.Item.DateOfBirth.Year),Month(Variables.getPersonData.Item.DateOfBirth.Month),Day(Variables.getPersonData.Item.DateOfBirth.Day));
Variables.insPerson = Application.cfcs.Person.insPerson(Variables.getPersonData.personID,Variables.getPersonData.Item.FirstName,Variables.getPersonData.Item.LastName,Variables.getPersonData.Item.CommonName,Variables.DOB);
</cfscript>
</cfif>在请求的页面上,您可以使用cfhtread同时发出多个http请求。您可以在这里查找有关将cfthread与cfhttp http://www.bennadel.com/blog/749-Learning-ColdFusion-8-CFThread-Part-II-Parallel-Threads.htm一起使用的更多信息
https://stackoverflow.com/questions/17284118
复制相似问题