在非常高的级别上,我们单击一个命令建筑物控制点的按钮;打开或关闭灯。单击应该向服务器发送 POST 请求。问题是有时单击按钮但 POST 请求不会发出。该按钮没有指示它是否已被单击的功能(小幅增强)。
目前,我想使用 Cypress 插件waitUntil()来解决这个问题。
// define routes
cy.server();
cy.route('POST', '\*\*/pointcommands').as('sendCommand');
// setup checkFunction for cy.waitUntil()
const waitForPost200 = () => cy.wait('@sendCommand', {timeout: 10000}).then(xhr => cy.wrap(xhr).its('status').should('eq', 200));
// setup jQuery for cy.pipe()
const click = $el => $el.click();
// click the button
cy.get('.marengo-ok')
.should('be.visible')
.pipe(click);
// need to pass in a synchronous should() check so that the click is retried. How can we achieve this with waitUntil ?
// wait until checkFunction waitForPost200() returns truthy …Run Code Online (Sandbox Code Playgroud) XMLHttpRequest()我有一个 Flask 应用程序,它使用客户端的对象处理来自 javascript 文件的发布请求。请注意,此应用程序在本地主机上运行。我试图根据服务器是否引发异常来返回响应。服务器很好地处理请求,但我无法访问响应。
这是服务器端的 Flask 路线。
@app.route("/updatecontact", methods=['POST', 'GET'])
def update_contact():
if request.method == 'POST':
try:
sqltools.update(request.json['msg'])
return "success"
except Exception as e:
return str(e), 400
Run Code Online (Sandbox Code Playgroud)
这是 javascript 中的函数,用于发送 POST 请求并(旨在)处理返回的响应
function pushtodatabase(key, newvals) {
var xhttp = new XMLHttpRequest()
xhttp.open('POST', 'updatecontact', true);
var msg = {"msg": newvals.join("|")};
var msgjson = JSON.stringify(msg)
xhttp.setRequestHeader("Content-type", 'application/json;charset=UTF-8');
xhttp.send(msgjson);
console.log(xhttp.responseText);
console.log(xhttp.status);
}
Run Code Online (Sandbox Code Playgroud)
但状态为 0,responseText 为空
我尝试过在烧瓶中使用不同的响应类型。我尝试添加这些标题
resp = Response("Foo bar baz")
resp.headers['Access-Control-Allow-Origin'] = '*'
resp.headers["Access-Control-Allow-Methods"] = "GET, POST, DELETE, PUT"
resp.status_code …Run Code Online (Sandbox Code Playgroud) 我使用下面的方法在 http get 请求中传递多个参数,但它给了我一个错误 -
import { HttpParams, HttpClient } from '@angular/common/http';
constructor(private http: HttpClient) { }
let params = new HttpParams();
params = params.append('var1', val1);
params = params.append('var2', val2);
this.http.get(StaticSettings.BASE_URL, {params: params}).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
错误- 无法重新声明块作用域变量“params”
如果我更改名称,那么如何在 URL 中调用它?
作为一种解决方法,我考虑直接在 URL 中附加参数,如下所示 -
this.params1 = 'parameter1';
this.params2 = 'parameter2';
this.params3 = 'parameter3';
Run Code Online (Sandbox Code Playgroud)
http 请求 -
return this.http.get('URL/json?'+'¶meter1='+this.params1+'¶meter2='+this.params2+'¶meter3='+this.params3)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误 -
Access to XMLHttpRequest at 'URL/json?'+'¶meter1='+this.params1+'¶meter2='+this.params2+'¶meter3='+this.params3' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the …
我需要更改定义哪些数据应来自我的请求的参数,该应用程序也需要定期刷新。如果用户在未完成的请求中更改参数,事情就会开始变得奇怪,并且会发生一些意外的行为。
所以我的方法是在开始新请求之前中止所有先前的请求,但使用后await controller.abort()似乎永远不会触发下一个请求,我是否需要清除信号或类似的东西?
const controller = new AbortController();
const async fetchData = (url, body = null) => {
let data;
const signal = controller.signal;
const headers = { ... };
response = await fetch(url, body ? {
method: "POST",
body: JSON.stringify(body),
signal,
headers
} : { headers, signal });;
data = await response.json()
return data
}
const firstData = await fetchData(url1, body1);
await controller.abort();
const secondData= await fetchData(url2, body2);
Run Code Online (Sandbox Code Playgroud)
发生的情况总是如此secondData,undefined实际上第二个请求从未发生(查看网络流量)。如果我停止源代码并尝试在执行await fetchData(url2)后运行,它会提示一个错误,或者如果我尝试在没有返回待处理承诺的情况下运行它,但在流量选项卡中看不到实际的请求。.abort() …
我正在尝试用 Vanilla JS 编写这个 jQuery ajax POST 请求;它最初是:
$.ajax({
method: 'POST',
url: window.location.href + 'email',
data: {
toEmail: to, //var set elsewhere
fromName: from, //var set elsewhere
message: message, //var set elsewhere
recaptcha: recaptcha //var set elsewhere
}
})
.done(function (data) {
handleResponse(data, form)
})
.fail(function (error) {
console.error(error)
alert('Couldn't send your email. Try again later.')
})
Run Code Online (Sandbox Code Playgroud)
处理响应是
function handleResponse (data, form) {
if (!data.message) return
if (!form) return
const responseMessage = form.querySelector('[email-response]')
const formData = form.querySelector('[email-data]')
if ('success' === …Run Code Online (Sandbox Code Playgroud) 我一整天都在做这件事,我真的需要朝正确的方向推动。
我的依赖是 -
"dependencies": {
"typescript": "^4.3.5",
"cypress": "^8.1.0",
"cypress-file-upload": "^5.0.8"
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为uploadBlob.txt
这就是它的样子 -
------WebKitFormBoundary7BhOPSS0NpEAppSA
Content-Disposition: form-data; name="UploadedFileName"
Prod_CA.ACI
------WebKitFormBoundary7BhOPSS0NpEAppSA
Content-Disposition: form-data; name="OrderId"
7815968_13735
------WebKitFormBoundary7BhOPSS0NpEAppSA
Content-Disposition: form-data; name="Options[orderid]"
7815968_13735
------WebKitFormBoundary7BhOPSS0NpEAppSA
Content-Disposition: form-data; name="Options[clientcode]"
1135
------WebKitFormBoundary7BhOPSS0NpEAppSA
Content-Disposition: form-data; name="Options[vendorserviceurl]"
[... 80+ More Items ...]
------WebKitFormBoundary7BhOPSS0NpEAppSA--
Run Code Online (Sandbox Code Playgroud)
我想做的是这样的 -
Cypress.Commands.add("formRequest", (info: ReqInfo) => {
cy.readFile("./fixtures/uploadBlob.txt", "utf-8").then(fixture => {
const blob = Cypress.Blob.binaryStringToBlob(fixture, "application/text");
const formData = new FormData();
formData.append('file', blob, "uploadBlob.txt");
return cy.request({
url: info.url,
method: info.method,
headers: info.headers,
form: true, …Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Calling a Web Service Using XmlHttpRequest</title>
<script type="text/javascript" language="javascript">
var xmlhttp;
var XMLContent='<XML ID="Transaction"><Transaction>'+
'<LoginDetails>'+
'<Email>artur</Email>'+
'<Password>demos2</Password>'+
'</LoginDetails>'+
'<JobDetails>'+
'<JobId>40170978</JobId>'+
'<JobRefNo>prod84</JobRefNo>'+
'<JobTitle>'+
'<![CDATA[ Director of R&D Software product (Multimedia)]]>'+
'</JobTitle>'+
'<JobExpiry>30</JobExpiry>'+
'<JobContactName>'+
'<![CDATA[ Brian Mc Fadden]]>'+
'</JobContactName>'+
'<JobContactEmail>brian.mcfadden@recruiters.ie</JobContactEmail>'+
'<JobShortDesc>'+
'<![CDATA[ Director of R&D Software product concepts Multimedia Web 2.0]]> '+
'</JobShortDesc>'+
'<JobDetDesc><![CDATA[ <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><STRONG>Director of R&D Software product concepts to</STRONG> build …Run Code Online (Sandbox Code Playgroud) 我在注册表单上使用XMLHttpRequest来查看他们输入的用户名是否已被占用.脚本运行正常,但我注意到在发出请求时有一些时间延迟 - 网页在发送请求后冻结了一秒钟.
有没有办法让"在后台"请求并且不会导致前端出现任何延迟?我喜欢Twitter的实现:它在搜索数据库时显示一个旋转的沙漏图标.我如何得到类似的东西?
不是严格的编程主题,但欣赏输入.我最近用YouTube API开发了很多东西,我开始使用PHP代码,使用SimpleXML,然后实际上跳过了AJAX并直接使用原生JSON并做了客户端的所有事情.
虽然它"感觉"更快,但我想知道它是否已准备好迎接黄金时段.即使有大量的框架,浏览器之间的CSS限制和事件传播处理的变化仍然让我担心在我的应用程序中过度使用Javascript.
一个缺点实际上是,有时,JavaScript的移动太快速,无延迟,可以为它感到心惊肉跳.
这些只是我的想法.我实际上还没有真正深入研究XHR,因为JSON之所以如此有意义,但我有兴趣知道经验丰富的程序员喜欢什么以及为什么.
编辑:
为了清楚起见,我在谈论在直接调用JSON API(JSON-P)之后是否足够安全地使用/依赖于加载的回调,或者你是否真的应该依赖于之间的隔离服务器端层(XHR)您和第三方API,如果没有别的 - 用于缓存目的?
你好(新年快乐!)
是否有一些关于如何使用JQUERY从远程REST API获取XML并只显示XML的示例?我只需要一些帮助即可.
请求详情:
https://{username}:{password}@api.opsourcecloud.net/oec/0.9/myaccount
Run Code Online (Sandbox Code Playgroud)
回复详情:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:Account xmlns:ns2="http://oec.api.opsource.net/schemas/organization" .. >
<ns3:userName>rdyer</ns3:userName>
<ns3:fullName>Joe Public</ns3:fullName>
<ns3:firstName>Joe</ns3:firstName>
<ns3:lastName>Public</ns3:lastName>
<ns3:emailAddress>jpublic24583@pop.net</ns3:emailAddress>
<ns3:orgId>1831c1a9-9c03-44df-a5a4-f2a4662d6bde</ns3:orgId>
<ns3:roles>
<ns3:role>
<ns3:name>primary administrator</ns3:name>
</ns3:role>
</ns3:roles>
</ns3:Account>
Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
javascript ×7
ajax ×3
cypress ×2
jquery ×2
angular ×1
fetch ×1
flask ×1
json ×1
python ×1
typescript ×1
wait ×1