ajax只能在当前页面不变的情况下请求后台,因此当然不能跨域。跨域的请求F12是没法跟踪跨域前的请求的,只能刷新跨域后跳到的页面跟踪
https://zhidao.baidu.com/question/528755051.html?qbl=relate_question_1&word=html%D2%B3%C3%E6%D6%D0%B5%C4%3Cscript%3E%B1%EA%C7%A9%CA%B2%C3%B4%CA%B1%BA%F2%BF%AA%CA%BC%D6%B4%D0%D0
浏览器自上而下解析html代码,从<!DOCTYPE html>到</html>,遇到js时浏览器会直接执行,(除了事件调用的脚本和声明函数的脚本)
xhr.done(function(data) {
var filterBreakfaseList = {};
var filterBedList = {};
var breakfaseEnum = enumConfig.breakfastType();
var bedEnum = enumConfig.bedType();
$.each(data.data, function(hotelKey, hotel) {
hotel.imageCount = hotel.images.length - 1;
hotel.supplierRooms = hotel.supplierRooms != undefined ? hotel.supplierRooms : [];
data.data[hotelKey]['roomCount'] = hotel.supplierRooms.length;
$.each(hotel.supplierRooms, function(roomKey, room) {
data.data[hotelKey]['supplierRooms'][roomKey]['breakfastShow'] = breakfaseEnum[room['breakfast']];
filterBreakfaseList[room['breakfast']] = breakfaseEnum[room['breakfast']];
var bedTypeShow = [];
$.each(room.bedTypes, function(bedKey, bedType) {
bedTypeShow.push(bedEnum[bedType]);
filterBedList[bedType] = bedEnum[bedType];
});
data.data[hotelKey]['supplierRooms'][roomKey]['bedTypeShow'] = bedTypeShow.join(',');
if(room['maxPersonNumOfBreakfast']){
data.data[hotelKey]['supplierRooms'][roomKey]['breakfastShow'] += ' ' + room['maxPersonNumOfBreakfast'] + '人份';
}
roomDetailCache[room.supplierId + '_' + room.supplierRoomId] = data.data[hotelKey]['supplierRooms'][roomKey];
});
});
js语法
jquery语法:
jQuery.each() 函数用于遍历指定的对象和数组。
$(function () {
var obj = {
"flammable": "inflammable",
"duh": "no duh"
};
$.each( obj, function( key, value ) {
alert( key + ": " + value );
});
})
key和value只是名字,可以随便定义。
define会先执行 是什么意思(同上图在一个页面中的代码)
https://www.cnblogs.com/cvst/articles/5817916.html
JQuery中$.ajax()方法参数详解
data为要发往服务器的数据,beforeSend为请求前对XMLhttpRequest对象的修改,
http://www.jb51.net/article/65215.htm
浏览器的console调试:
直接在console控制台输入js变量和表达式就可以进行调试。
浏览器打断点:
1.点选得到js对象的id或class,全局搜索js或class找到对应的js文件
2.在source里的js里直接点左边代码一下就设置上了:
3.一步步往下跳。
调试模式下的Initiator用于解释左侧对应请求是怎么发起的
设置表单属性并提交:
$('#bookingForm').attr('action', ret.url).submit();
jquery获取指定html元素的属性值或给该属性赋值
$(selector).attr(attribute) $(selector).attr(attribute,value)
jquery获取指定html元素的数据或给其赋值(只是给元素赋值而已,不是展示什么新元素也不是给元素添加新属性)
$(selector).data(name) $(selector).data(name,value)
AJAX发起的post请求,表单数据放在Request Payload中。
提交的是hotelData,到了后台怎么突然放进了ihOrderHotelVO??
将函数绑定到 submit 事件(可以绑定到任何事件,注意这种绑定形式)
语法
$(selector).submit(function)
jquery的removeClass()方法:
移除css样式
jquery的live()方法和bind()方法:
为某个元素添加某个事件(必须是事件比如click或submit等等,不是一个随便的函数名)处理器(事件处理器是事件和事件发生时运行函数(包括参数)的总和)
$(document).ready(function(){}):
当DOM(HTML)文档全部加载完成后开始执行的ready函数
$(function(){}) 是 $(document).ready(function(){}) 的简写
var hotCityId = [];
$("[op=hotCity]:gt(0)", "#hotCityList").each(function (key, value) {
hotCityId.push($(value).data('cityid'));
});
使用的jQuery,获取id为hotCityList下,包含op属性并且值为hotCity([op=hotCity])的dom对象,并且从第二个(gt选择器)开始(:gt(0))进行遍历,获取对象中缓存的cityid这个数据压入hotCityId数组中
教训:
js元素来源追踪:
本页面上在代码里直接找不到(点选得到的直接id或class不在当前页面代码里)的任何元素若不是直接写在HTML中那一定是被js生成的或是使用某个模板的指令生成的(先找到模板页面继续用相同的办法在模板页面里追踪)。
一:从内向外依次点选确定目标元素的div的id或class(也可能不是div)并在当前页面代码中找(无则继续向外点选),有则找对应js代码(从当前页面的script标签和script标签引入的js文件中找,中文内容不一定能找到(例如asc码表示)可以用内容的id或class找。
js过程跟踪:
正向,逆向,中间向
远程js打断点在下面点大括号展开