大宛国王欣喜不已,派人把张骞护送到康居,由康居转送大月氏。可是到了大月氏以后,发现情况跟当时报告的不一样了。这十年中,老国王被匈奴人杀害,太子被立为王,征服了大夏。新国王认为,大月氏土地肥美,人民安居乐业,而且离汉朝太远,没有必要再去大动干戈报复匈奴。张骞在月氏停留了一年,始终不能圆满达成使命,只好回国。
公元前128年,张骞取道昆仑山北麓,打算从青海柴达木盆地的羌族居住区回国。这一次,张骞很不幸地又被匈奴抓到了,关了一年多之后,即公元前126年,匈奴内部发生了动乱,张骞趁乱逃回长安。回国后,汉武帝封他为太中大夫,堂邑父为奉使君。
从公元前139年到公元前126年,张骞历尽千辛万苦,用了十三年时间,出发时带着随从一百多人,返回时,只剩堂邑父一人同行。虽然这次出使付出了很高的代价,没有达到汉武帝要求的政治目的,但是张骞是个细心的人,一路走来所遇到的人和事他都仔细记录下来。张骞把这些地理知识写成报告上奏汉武帝,使生活在中原内地的人们,获得了有关西域各国极为丰富的地理知识,了解到西域的实况。后来司马迁也是根据这些报告写成了《大宛列传》保存至今。